diff options
| author | Daniel She <shekwancheung0528@gmail.com> | 2019-01-22 17:46:08 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-01-22 17:46:08 +0800 |
| commit | d62aa8ca0dd7e2759f231cc8970e285b36a685fd (patch) | |
| tree | 5ef4dd1d4274c9c9beb54c51eccf28b2accb7bfa /src/main/java/me | |
| parent | f2f6213150d41bcf51b0c1032bd639f28389d294 (diff) | |
| parent | 680a75bb732475d55d8b8f03802b95cb7521b1a1 (diff) | |
| download | RoughlyEnoughItems-d62aa8ca0dd7e2759f231cc8970e285b36a685fd.tar.gz RoughlyEnoughItems-d62aa8ca0dd7e2759f231cc8970e285b36a685fd.tar.bz2 RoughlyEnoughItems-d62aa8ca0dd7e2759f231cc8970e285b36a685fd.zip | |
Merge pull request #11 from TehNut/plugin-loader-migration
Migrate to pluginloader
Diffstat (limited to 'src/main/java/me')
3 files changed, 36 insertions, 105 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index efca3aa36..3770a8d9f 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -2,19 +2,16 @@ package me.shedaniel.rei; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; import me.shedaniel.rei.api.IRecipePlugin; -import me.shedaniel.rei.api.REIPluginInfo; import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.ConfigHelper; import me.shedaniel.rei.client.RecipeHelper; import me.shedaniel.rei.listeners.IListener; +import me.shedaniel.rei.plugin.DefaultPlugin; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ModInitializer; +import net.fabricmc.api.loader.Loader; import net.fabricmc.fabric.networking.CustomPayloadPacketRegistry; -import net.fabricmc.loader.FabricLoader; -import net.fabricmc.loader.ModContainer; import net.minecraft.client.resource.language.I18n; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; @@ -25,19 +22,10 @@ import net.minecraft.util.Identifier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.file.Files; -import java.nio.file.StandardOpenOption; -import java.util.Collection; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.jar.JarFile; import java.util.stream.Collectors; -import java.util.zip.ZipEntry; public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitializer { @@ -84,7 +72,9 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali @Override public void onInitializeClient() { registerREIListeners(); - discoverPlugins(); + // If pluginloader is not installed, base functionality should still remain + if (!Loader.getInstance().isModLoaded("pluginloader")) + registerPlugin(new Identifier("roughlyenoughitems", "default_plugin"), new DefaultPlugin()); configHelper = new ConfigHelper(); } @@ -105,62 +95,6 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali registerFabricPackets(); } - private void discoverPlugins() { - Collection<ModContainer> modContainers = FabricLoader.INSTANCE.getModContainers(); - List<REIPluginInfo> pluginInfoList = Lists.newArrayList(); - JsonParser parser = new JsonParser(); - modContainers.forEach(modContainer -> { - InputStream inputStream = null; - if (modContainer.getOriginFile().isFile()) - try (JarFile file = new JarFile(modContainer.getOriginFile())) { - ZipEntry entry = file.getEntry("plugins" + File.separatorChar + "rei.plugin.json"); - if (entry != null) - inputStream = file.getInputStream(entry); - } catch (Exception e) { - RoughlyEnoughItemsCore.LOGGER.error("REI: Failed to load plugin file from " + modContainer.getInfo().getId() + ". (" + e.getLocalizedMessage() + ")"); - } - else if (modContainer.getOriginFile().isDirectory()) { - File modInfo = new File(modContainer.getOriginFile(), "plugins" + File.separatorChar + "rei.plugin.json"); - if (modInfo.exists()) - try { - inputStream = Files.newInputStream(modInfo.toPath(), StandardOpenOption.READ); - } catch (Exception e) { - RoughlyEnoughItemsCore.LOGGER.error("REI: Failed to load plugin file from " + modContainer.getInfo().getId() + ". (" + e.getLocalizedMessage() + ")"); - } - } - if (inputStream != null) - try { - JsonElement jsonElement = parser.parse(new InputStreamReader(inputStream)); - if (jsonElement != null && jsonElement.isJsonObject()) { - REIPluginInfo info = REIPluginInfo.GSON.fromJson(jsonElement, REIPluginInfo.class); - if (info != null) - pluginInfoList.add(info); - } - } catch (Exception e) { - RoughlyEnoughItemsCore.LOGGER.error("REI: Failed to load REI plugin info from " + modContainer.getInfo().getId() + ". (" + e.getLocalizedMessage() + ")"); - } finally { - try { - inputStream.close(); - } catch (IOException e) { - RoughlyEnoughItemsCore.LOGGER.error("REI: Failed to close input stream from " + modContainer.getInfo().getId() + ". (" + e.getLocalizedMessage() + ")"); - } - } - }); - pluginInfoList.stream().forEachOrdered(reiPluginInfo -> { - reiPluginInfo.getPlugins().forEach(reiPlugin -> { - try { - Identifier identifier = new Identifier(reiPlugin.getIdentifier()); - Class<?> aClass = Class.forName(reiPlugin.getPluginClass()); - IRecipePlugin plugin = IRecipePlugin.class.cast(aClass.newInstance()); - RoughlyEnoughItemsCore.registerPlugin(identifier, plugin); - RoughlyEnoughItemsCore.LOGGER.info("REI: Registered REI plugin: " + reiPlugin.getIdentifier()); - } catch (Exception e) { - RoughlyEnoughItemsCore.LOGGER.error("REI: Failed to register REI plugin: " + reiPlugin.getIdentifier() + ". (" + e.getLocalizedMessage() + ")"); - } - }); - }); - } - private void registerFabricPackets() { CustomPayloadPacketRegistry.SERVER.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> { ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer(); diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java new file mode 100644 index 000000000..d3ff98686 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsPlugins.java @@ -0,0 +1,31 @@ +package me.shedaniel.rei; + +import info.tehnut.pluginloader.LoaderCreator; +import info.tehnut.pluginloader.PluginLoaderBuilder; +import info.tehnut.pluginloader.ValidationStrategy; +import me.shedaniel.rei.api.IRecipePlugin; +import net.fabricmc.loader.language.LanguageAdapter; +import net.fabricmc.loader.language.LanguageAdapterException; +import net.minecraft.util.Identifier; + +public class RoughlyEnoughItemsPlugins implements LoaderCreator { + + @Override + public void createLoaders() { + LanguageAdapter.Options instantiationOptions = new LanguageAdapter.Options(); + + new PluginLoaderBuilder("roughlyenoughitems") + .withValidator(ValidationStrategy.hasInterface(IRecipePlugin.class)) + .withInitializer((aClass, container) -> { + Identifier id = new Identifier(container.getOwner().getInfo().getId(), container.getInfo().getId()); + try { + IRecipePlugin plugin = (IRecipePlugin) container.getOwner().getAdapter().createInstance(aClass, instantiationOptions); + RoughlyEnoughItemsCore.registerPlugin(id, plugin); + RoughlyEnoughItemsCore.LOGGER.info("Registered plugin %s from %s", id, aClass); + } catch (LanguageAdapterException e) { + RoughlyEnoughItemsCore.LOGGER.error("Error loading plugin %s", id, e); + } + }) + .build(); + } +} diff --git a/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java b/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java deleted file mode 100644 index e596bb31f..000000000 --- a/src/main/java/me/shedaniel/rei/api/REIPluginInfo.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.shedaniel.rei.api; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.annotations.SerializedName; - -import java.util.List; - -public class REIPluginInfo { - - public static Gson GSON = new GsonBuilder().create(); - - private List<REIPlugin> plugins; - - public static class REIPlugin { - private String identifier; - @SerializedName("class") private String pluginClass; - - public String getIdentifier() { - if (identifier == null) - return "null:null"; - return identifier; - } - - public String getPluginClass() { - return pluginClass; - } - } - - public List<REIPlugin> getPlugins() { - return plugins; - } - -} |
