Added ModMenu as build dependency and refactored Integration
This commit is contained in:
parent
3e18eb839f
commit
08e400ae20
11 changed files with 80 additions and 90 deletions
|
@ -16,11 +16,11 @@ group = project.maven_group
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven { url "https://maven.dblsaiko.net/" }
|
maven { url "https://maven.dblsaiko.net/" }
|
||||||
maven { url "https://server.bbkr.space:8081/artifactory/libs-release/" }
|
|
||||||
maven { url "https://maven.fabricmc.net/" }
|
maven { url "https://maven.fabricmc.net/" }
|
||||||
maven { url "https://maven.shedaniel.me/" }
|
maven { url "https://maven.shedaniel.me/" }
|
||||||
maven { url 'https://maven.blamejared.com' }
|
maven { url 'https://maven.blamejared.com' }
|
||||||
maven { url 'https://jitpack.io' }
|
maven { url 'https://jitpack.io' }
|
||||||
|
maven { url 'https://maven.terraformersmc.com/releases' }
|
||||||
}
|
}
|
||||||
|
|
||||||
loom {
|
loom {
|
||||||
|
@ -32,6 +32,7 @@ dependencies {
|
||||||
mappings loom.officialMojangMappings()
|
mappings loom.officialMojangMappings()
|
||||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||||
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
|
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
|
||||||
|
modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}"
|
||||||
|
|
||||||
//useApi "vazkii.patchouli:Patchouli:1.16.4-${project.patchouli_version}"
|
//useApi "vazkii.patchouli:Patchouli:1.16.4-${project.patchouli_version}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,4 +16,5 @@ maven_group = ru.bclib
|
||||||
archives_base_name = bclib
|
archives_base_name = bclib
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
patchouli_version = 50-FABRIC
|
patchouli_version = 50-FABRIC
|
||||||
|
modmenu_version=3.0.0
|
|
@ -1,37 +0,0 @@
|
||||||
/**
|
|
||||||
* MIT License
|
|
||||||
*
|
|
||||||
* Copyright (c) 2018-2020 Prospector
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.terraformersmc.modmenu.api;
|
|
||||||
|
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
|
||||||
|
|
||||||
// This File was included from TerraformersMC/ModMenu
|
|
||||||
// to enable a ModMenu-Integration without having to
|
|
||||||
// compile against the actual plugin in an attempt
|
|
||||||
// to reduce dependencies
|
|
||||||
|
|
||||||
@FunctionalInterface
|
|
||||||
public interface ConfigScreenFactory<S extends Screen> {
|
|
||||||
S create(Screen parent);
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
/**
|
|
||||||
* MIT License
|
|
||||||
*
|
|
||||||
* Copyright (c) 2018-2020 Prospector
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
package com.terraformersmc.modmenu.api;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
// This File was included from TerraformersMC/ModMenu
|
|
||||||
// to enable a ModMenu-Integration without having to
|
|
||||||
// compile against the actual plugin in an attempt
|
|
||||||
// to reduce dependencies
|
|
||||||
|
|
||||||
public interface ModMenuApi {
|
|
||||||
default ConfigScreenFactory<?> getModConfigScreenFactory() {
|
|
||||||
return screen -> null;
|
|
||||||
}
|
|
||||||
|
|
||||||
default Map<String, ConfigScreenFactory<?>> getProvidedConfigScreenFactories() {
|
|
||||||
return ImmutableMap.of();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,7 +2,7 @@ package ru.bclib.api;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import ru.bclib.integration.ModIntegration;
|
import ru.bclib.integration.modmenu.ModIntegration;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package ru.bclib.gui.modmenu;
|
package ru.bclib.gui.modmenu;
|
||||||
|
|
||||||
import com.terraformersmc.modmenu.api.ModMenuApi;
|
import ru.bclib.integration.modmenu.ModMenuIntegration;
|
||||||
import ru.bclib.integration.ModMenuIntegration;
|
|
||||||
|
|
||||||
|
@Deprecated()
|
||||||
public class EntryPoint extends ModMenuIntegration {
|
public class EntryPoint extends ModMenuIntegration {
|
||||||
public static final ModMenuApi entrypointObject = (ModMenuApi) createEntrypoint(new EntryPoint());
|
public static final Object entrypointObject = createEntrypoint(new EntryPoint());
|
||||||
|
|
||||||
public EntryPoint() {
|
public EntryPoint() {
|
||||||
super(MainScreen::new);
|
super(MainScreen::new);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.bclib.integration;
|
package ru.bclib.integration.modmenu;
|
||||||
|
|
||||||
import net.fabricmc.fabric.api.tag.TagFactory;
|
import net.fabricmc.fabric.api.tag.TagFactory;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
29
src/main/java/ru/bclib/integration/modmenu/ModMenu.java
Normal file
29
src/main/java/ru/bclib/integration/modmenu/ModMenu.java
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
package ru.bclib.integration.modmenu;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration, to provide a custom Screen for ModMenu.
|
||||||
|
* <p>
|
||||||
|
* This integration allows you to use ModMenu without adding a dependency to your project. If the
|
||||||
|
* Mod is installed on the Client.
|
||||||
|
* <p>
|
||||||
|
* You can add a screen for your mod by calling {@link #addModMenuScreen(String, Function)}
|
||||||
|
*/
|
||||||
|
public class ModMenu {
|
||||||
|
static final Map<String, Function<Screen, Screen>> screen = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* registers a ModMenu entrypoint for another Mod. For Example {@code addModMenuScreen("myMod", (parent)->new Screen(parent));}
|
||||||
|
* @param modID The ID of your Mod
|
||||||
|
* @param scr a function that takes a parent {@link Screen} and provides the main Screen you want
|
||||||
|
* to show with ModMenu for your Mod.
|
||||||
|
*/
|
||||||
|
public static void addModMenuScreen(String modID, Function<Screen, Screen> scr) {
|
||||||
|
screen.put(modID, scr);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package ru.bclib.integration.modmenu;
|
||||||
|
|
||||||
|
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
|
||||||
|
import com.terraformersmc.modmenu.api.ModMenuApi;
|
||||||
|
import ru.bclib.gui.modmenu.MainScreen;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal class to hook into ModMenu, you should not need to use this class. If you want to register a
|
||||||
|
* ModMenu Screen for a Mod using BCLib, use {@link ModMenu#addModMenuScreen(String, Function)}
|
||||||
|
*/
|
||||||
|
public class ModMenuEntryPoint implements ModMenuApi {
|
||||||
|
@Override
|
||||||
|
public Map<String, ConfigScreenFactory<?>> getProvidedConfigScreenFactories() {
|
||||||
|
Map<String, ConfigScreenFactory<?>> copy = new HashMap<>();
|
||||||
|
for (var entry : ModMenu.screen.entrySet() ){
|
||||||
|
copy.put(entry.getKey(), (parent)->entry.getValue().apply(parent));
|
||||||
|
}
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ConfigScreenFactory<?> getModConfigScreenFactory() {
|
||||||
|
return (parent)->new MainScreen(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,16 +1,19 @@
|
||||||
package ru.bclib.integration;
|
package ru.bclib.integration.modmenu;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
|
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
|
||||||
import com.terraformersmc.modmenu.api.ModMenuApi;
|
import com.terraformersmc.modmenu.api.ModMenuApi;
|
||||||
import net.minecraft.client.gui.screens.Screen;
|
import net.minecraft.client.gui.screens.Screen;
|
||||||
import ru.bclib.integration.ModMenuIntegration.ModMenuScreenFactory;
|
import ru.bclib.integration.modmenu.ModMenuIntegration.ModMenuScreenFactory;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationHandler;
|
import java.lang.reflect.InvocationHandler;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Proxy;
|
import java.lang.reflect.Proxy;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
class ModMenuScreenFactoryImpl {
|
class ModMenuScreenFactoryImpl {
|
||||||
record ScreenFactoryInvocationHandler(ModMenuScreenFactory act) implements InvocationHandler {
|
record ScreenFactoryInvocationHandler(ModMenuScreenFactory act) implements InvocationHandler {
|
||||||
@Override
|
@Override
|
||||||
|
@ -43,6 +46,7 @@ class ModMenuScreenFactoryImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
/**
|
/**
|
||||||
* Integration, to provide a custom Screen for ModMenu.
|
* Integration, to provide a custom Screen for ModMenu.
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -172,4 +176,5 @@ public abstract class ModMenuIntegration {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -26,7 +26,9 @@
|
||||||
"server": [
|
"server": [
|
||||||
"ru.bclib.server.BCLibServer"
|
"ru.bclib.server.BCLibServer"
|
||||||
],
|
],
|
||||||
"modmenu": [ "ru.bclib.gui.modmenu.EntryPoint::entrypointObject" ]
|
"modmenu": [
|
||||||
|
"ru.bclib.integration.modmenu.ModMenuEntryPoint"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"accessWidener" : "bclib.accesswidener",
|
"accessWidener" : "bclib.accesswidener",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue