RoughlyEnoughItemsCore.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package me.shedaniel.rei;
  2. import com.google.common.collect.Maps;
  3. import me.shedaniel.rei.api.IRecipePlugin;
  4. import me.shedaniel.rei.client.ClientHelper;
  5. import me.shedaniel.rei.client.ConfigHelper;
  6. import me.shedaniel.rei.client.GuiHelper;
  7. import me.shedaniel.rei.client.RecipeHelper;
  8. import me.shedaniel.rei.plugin.DefaultPlugin;
  9. import me.shedaniel.rei.update.UpdateChecker;
  10. import net.fabricmc.api.ClientModInitializer;
  11. import net.fabricmc.api.ModInitializer;
  12. import net.fabricmc.fabric.api.event.client.ClientTickCallback;
  13. import net.fabricmc.fabric.api.network.ServerSidePacketRegistry;
  14. import net.fabricmc.loader.FabricLoader;
  15. import net.minecraft.client.resource.language.I18n;
  16. import net.minecraft.item.ItemStack;
  17. import net.minecraft.server.network.ServerPlayerEntity;
  18. import net.minecraft.sortme.ChatMessageType;
  19. import net.minecraft.text.StringTextComponent;
  20. import net.minecraft.text.TranslatableTextComponent;
  21. import net.minecraft.util.Identifier;
  22. import org.apache.logging.log4j.LogManager;
  23. import org.apache.logging.log4j.Logger;
  24. import java.util.LinkedList;
  25. import java.util.List;
  26. import java.util.Map;
  27. public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitializer {
  28. public static final Logger LOGGER = LogManager.getFormatterLogger("REI");
  29. public static final Identifier DELETE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "delete_item");
  30. public static final Identifier CREATE_ITEMS_PACKET = new Identifier("roughlyenoughitems", "create_item");
  31. private static final RecipeHelper RECIPE_HELPER = new RecipeHelper();
  32. private static final ClientHelper CLIENT_HELPER = new ClientHelper();
  33. private static final Map<Identifier, IRecipePlugin> plugins = Maps.newHashMap();
  34. private static ConfigHelper configHelper;
  35. public static RecipeHelper getRecipeHelper() {
  36. return RECIPE_HELPER;
  37. }
  38. public static ConfigHelper getConfigHelper() {
  39. return configHelper;
  40. }
  41. public static ClientHelper getClientHelper() {
  42. return CLIENT_HELPER;
  43. }
  44. public static IRecipePlugin registerPlugin(Identifier identifier, IRecipePlugin plugin) {
  45. plugins.put(identifier, plugin);
  46. RoughlyEnoughItemsCore.LOGGER.info("REI: Registered plugin %s from %s", identifier.toString(), plugin.getClass().getSimpleName());
  47. return plugin;
  48. }
  49. public static List<IRecipePlugin> getPlugins() {
  50. return new LinkedList<>(plugins.values());
  51. }
  52. public static Identifier getPluginIdentifier(IRecipePlugin plugin) {
  53. for(Identifier identifier : plugins.keySet())
  54. if (plugins.get(identifier).equals(plugin))
  55. return identifier;
  56. return null;
  57. }
  58. @Override
  59. public void onInitializeClient() {
  60. // If pluginloader is not installed, base functionality should still remain
  61. if (!FabricLoader.INSTANCE.getModContainers().stream().map(modContainer -> modContainer.getInfo().getId()).anyMatch(s -> s.equalsIgnoreCase("pluginloader"))) {
  62. RoughlyEnoughItemsCore.LOGGER.warn("REI: Plugin Loader is not loaded! Please consider installing https://minecraft.curseforge.com/projects/pluginloader for REI plugin compatibility!");
  63. registerPlugin(new Identifier("roughlyenoughitems", "default_plugin"), new DefaultPlugin());
  64. }
  65. configHelper = new ConfigHelper();
  66. ClientTickCallback.EVENT.register(GuiHelper::onTick);
  67. if (getConfigHelper().checkUpdates())
  68. ClientTickCallback.EVENT.register(UpdateChecker::onTick);
  69. new UpdateChecker().onInitializeClient();
  70. }
  71. @Override
  72. public void onInitialize() {
  73. registerFabricPackets();
  74. }
  75. private void registerFabricPackets() {
  76. ServerSidePacketRegistry.INSTANCE.register(DELETE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
  77. ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
  78. if (!player.inventory.getCursorStack().isEmpty())
  79. player.inventory.setCursorStack(ItemStack.EMPTY);
  80. });
  81. ServerSidePacketRegistry.INSTANCE.register(CREATE_ITEMS_PACKET, (packetContext, packetByteBuf) -> {
  82. ServerPlayerEntity player = (ServerPlayerEntity) packetContext.getPlayer();
  83. ItemStack stack = packetByteBuf.readItemStack();
  84. if (player.inventory.insertStack(stack.copy()))
  85. player.sendChatMessage(new StringTextComponent(I18n.translate("text.rei.cheat_items").replaceAll("\\{item_name}", stack.copy().getDisplayName().getFormattedText()).replaceAll("\\{item_count}", stack.copy().getAmount() + "").replaceAll("\\{player_name}", player.getEntityName())), ChatMessageType.SYSTEM);
  86. else
  87. player.sendChatMessage(new TranslatableTextComponent("text.rei.failed_cheat_items"), ChatMessageType.SYSTEM);
  88. });
  89. }
  90. }