diff --git a/src/main/java/mcp/mobius/waila/addons/core/BaseModule.java b/src/main/java/mcp/mobius/waila/addons/core/BaseModule.java new file mode 100644 index 00000000..0d4a6141 --- /dev/null +++ b/src/main/java/mcp/mobius/waila/addons/core/BaseModule.java @@ -0,0 +1,59 @@ +package mcp.mobius.waila.addons.core; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +public class BaseModule { + + protected static final Map> classes = new HashMap<>(); + protected static final Map fields = new HashMap<>(); + protected static final Map methods = new HashMap<>(); + + protected void registerClass(String className) throws Exception { + if (classes.containsKey(className)) return; + Class clazz = Class.forName(className); + classes.put(clazz.getSimpleName(), clazz); + } + + protected void registerField(String className, String fieldName) throws Exception { + if (fields.containsKey(className + "." + fieldName)) return; + Class clazz = classes.get(className); + Field field = clazz.getField(fieldName); + fields.put(clazz.getSimpleName() + "." + fieldName, field); + } + + protected void registerMethod(String className, String methodName, Class... parameterTypes) throws Exception { + if (methods.containsKey(className + "." + methodName)) return; + Class clazz = classes.get(className); + Method method = clazz.getMethod(methodName, parameterTypes); + methods.put(clazz.getSimpleName() + "." + methodName, method); + } + + public static Object invokeMethod(String methodKey, Object instance, Object... args) throws Exception { + Method method = methods.get(methodKey); + if (method == null) { + throw new IllegalArgumentException("Method " + methodKey + " is not registered."); + } + + return method.invoke(instance, args); + } + + public static Object getField(String fieldKey, Object instance) throws Exception { + Field field = fields.get(fieldKey); + if (field == null) { + throw new IllegalArgumentException("Field " + fieldKey + " is not registered."); + } + + return field.get(instance); + } + + public static Class getClass(String className) { + Class clazz = classes.get(className); + if (clazz == null) { + throw new IllegalArgumentException("Class " + className + " is not registered."); + } + return clazz; + } +} diff --git a/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerBlocks.java b/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerBlocks.java index fba83dd0..40ac0ec6 100644 --- a/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerBlocks.java +++ b/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerBlocks.java @@ -36,6 +36,7 @@ public List getWailaHead(ItemStack itemStack, List currenttip, I String displayName = DisplayUtil.itemDisplayNameShort(itemStack); if (displayName != null && !displayName.endsWith("Unnamed")) name = displayName; + if (name != null) currenttip.add(name); @@ -46,10 +47,10 @@ public List getWailaHead(ItemStack itemStack, List currenttip, I redstoneMeta = " " + redstoneMeta; currenttip.set(currenttip.size() - 1, name + " " + redstoneMeta); } - if (currenttip.size() == 0) - currenttip.add("\u00a7r" + String.format(FormattingConfig.blockFormat, "< Unnamed >")); - else if (ConfigHandler.instance().getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_METADATA, true) && !Strings.isNullOrEmpty(FormattingConfig.metaFormat)) - currenttip.add("\u00a7r" + String.format(FormattingConfig.metaFormat, accessor.getBlock().getRegistryName().toString(), accessor.getMetadata())); + + String modName = ModIdentification.nameFromStack(itemStack); + if (!Strings.isNullOrEmpty(FormattingConfig.modNameFormat)) + currenttip.add(String.format(FormattingConfig.modNameFormat, modName)); return currenttip; } @@ -74,9 +75,12 @@ public List getWailaBody(ItemStack itemStack, List tooltip, IWai public List getWailaTail(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { if (accessor.getBlockState().getMaterial().isLiquid()) return currenttip; - String modName = ModIdentification.nameFromStack(itemStack); - if (!Strings.isNullOrEmpty(FormattingConfig.modNameFormat)) - currenttip.add(String.format(FormattingConfig.modNameFormat, modName)); + + String displayName = DisplayUtil.itemDisplayNameShort(itemStack); + if (displayName == null || displayName.endsWith("Unnamed")) + currenttip.add("§r" + String.format(FormattingConfig.blockFormat, "< Unnamed >")); + else if (ConfigHandler.instance().getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_METADATA, true) && !Strings.isNullOrEmpty(FormattingConfig.metaFormat)) + currenttip.add("§r" + String.format(FormattingConfig.metaFormat, accessor.getBlock().getRegistryName().toString(), accessor.getMetadata())); return currenttip; } diff --git a/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerEntities.java b/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerEntities.java index 3cc57b9a..844a824a 100644 --- a/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerEntities.java +++ b/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerEntities.java @@ -36,6 +36,9 @@ public List getWailaHead(Entity entity, List currenttip, IWailaE } } else currenttip.add("Unknown"); + if (!Strings.isNullOrEmpty(FormattingConfig.modNameFormat) && !Strings.isNullOrEmpty(getEntityMod(entity))) + currenttip.add(String.format(FormattingConfig.modNameFormat, getEntityMod(entity))); + return currenttip; } @@ -59,8 +62,6 @@ public List getWailaBody(Entity entity, List currenttip, IWailaE @Nonnull @Override public List getWailaTail(Entity entity, List currenttip, IWailaEntityAccessor accessor, IWailaConfigHandler config) { - if (!Strings.isNullOrEmpty(FormattingConfig.modNameFormat) && !Strings.isNullOrEmpty(getEntityMod(entity))) - currenttip.add(String.format(FormattingConfig.modNameFormat, getEntityMod(entity))); return currenttip; } @@ -73,4 +74,4 @@ private static String getEntityMod(Entity entity) { ModContainer container = ModIdentification.findModContainer(entityEntry.getRegistryName().getResourceDomain()); return container.getName(); } -} \ No newline at end of file +} diff --git a/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerFluids.java b/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerFluids.java index 8a6a7ee2..6770d267 100644 --- a/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerFluids.java +++ b/src/main/java/mcp/mobius/waila/addons/core/HUDHandlerFluids.java @@ -45,12 +45,11 @@ public List getWailaHead(ItemStack itemStack, List currenttip, I name = displayName; if (name != null) - currenttip.add("\u00a7r" + name); + currenttip.add("§r" + name); - if (currenttip.isEmpty()) - currenttip.add("\u00a7r" + String.format(FormattingConfig.fluidFormat, "< Unnamed >")); - else if (ConfigHandler.instance().getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_METADATA, true) && !Strings.isNullOrEmpty(FormattingConfig.metaFormat)) - currenttip.add(String.format(FormattingConfig.metaFormat, accessor.getBlock().getRegistryName().toString(), accessor.getMetadata())); + String modName = ModIdentification.findModContainer(FluidRegistry.getDefaultFluidName(fluid).split(":")[0]).getName(); + if (!Strings.isNullOrEmpty(FormattingConfig.modNameFormat) && !Strings.isNullOrEmpty(modName)) + currenttip.add(String.format(FormattingConfig.modNameFormat, modName)); return currenttip; } @@ -62,9 +61,12 @@ public List getWailaTail(ItemStack itemStack, List currenttip, I if (fluid == null) return currenttip; - String modName = ModIdentification.findModContainer(FluidRegistry.getDefaultFluidName(fluid).split(":")[0]).getName(); - if (!Strings.isNullOrEmpty(FormattingConfig.modNameFormat) && !Strings.isNullOrEmpty(modName)) - currenttip.add(String.format(FormattingConfig.modNameFormat, modName)); + String displayName = String.format(FormattingConfig.fluidFormat, fluid.getLocalizedName(new FluidStack(fluid, 1000))); + + if (displayName == null || displayName.endsWith("Unnamed")) + currenttip.add("§r" + String.format(FormattingConfig.fluidFormat, "< Unnamed >")); + else if (ConfigHandler.instance().getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_METADATA, true) && !Strings.isNullOrEmpty(FormattingConfig.metaFormat)) + currenttip.add(String.format(FormattingConfig.metaFormat, accessor.getBlock().getRegistryName().toString(), accessor.getMetadata())); return currenttip; } diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerCrops.java b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerCrops.java index bf1ba082..ed043db5 100644 --- a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerCrops.java +++ b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerCrops.java @@ -22,78 +22,130 @@ public class HUDHandlerCrops implements IWailaDataProvider { private static final Logger LOGGER = LogManager.getLogger(); static final IWailaDataProvider INSTANCE = new HUDHandlerCrops(); - private static final String DEFAULT_FORMAT = "§f%s: %d§r"; - private static final String TITLE_FORMAT = "§f%s§r"; - private static final String STAT_GROWTH_FORMAT = "§f%s: §2%d/31§r"; - private static final String STAT_GAIN_FORMAT = "§f%s: §6%d/31§r"; - private static final String STAT_RESISTANCE_FORMAT = "§f%s: §3%d/31§r"; + private static final String FORMAT_PARAMS_DEFAULT = "§f%s: %d/%d§r"; + private static final String FORMAT_PARAMS_COLORED = "%s%s:§r §f%d/%d§r"; + private static final String FORMAT_PARAMS_TITLE = "§e%s§r"; + + @Nonnull + @Override + public ItemStack getWailaStack(IWailaDataAccessor accessor, IWailaConfigHandler config) { + NBTTagCompound tag = accessor.getNBTData(); + ItemStack result = accessor.getStack(); + TileEntity te = accessor.getTileEntity(); + + try { + if (!IC2Module.getClass("TileEntityCrop").isInstance(te)) return result; + + Object cropCard = IC2Module.invokeMethod("TileEntityCrop.getCrop", te); + + if (cropCard == null) return result; + + if (tag.getInteger("scanLevel") < 1) { + result.setStackDisplayName(LangUtil.translateG("hud.ic2.msg.unknown")); + return result; + } + + Object instance = IC2Module.getField("Ic2Crops.instance", null); + ItemStack displayItem = (ItemStack) IC2Module.invokeMethod("Ic2Crops.getDisplayItem", instance, cropCard); + if (displayItem == null) return result; + + Object LocaleContext = IC2Module.invokeMethod("Ic2Crops.getCropName", instance, cropCard); + displayItem.setStackDisplayName((String) IC2Module.invokeMethod("LocaleComp.getLocalized", LocaleContext)); + result = displayItem; + } catch (Exception e) { + LOGGER.error("Failed to get crop data", e); + } + return result; + } + + @Nonnull + @Override + public List getWailaHead(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + return currenttip; + } @Nonnull @Override public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (!config.getConfig("ic2.crops")) return currenttip; + Optional.ofNullable(accessor.getTileEntity()).ifPresent(te -> { NBTTagCompound tag = accessor.getNBTData(); int scanLevel = tag.getInteger("scanLevel"); - if (scanLevel >= 1) { - addGrowthInfo(currenttip, tag); + if (!accessor.getPlayer().isSneaking() && config.getConfig("ic2.crops.sneakshow")) { + currenttip.add(String.format(FORMAT_PARAMS_TITLE, LangUtil.translateG("hud.ic2.msg.sneaktip"))); + } else { + if (scanLevel < 4) { + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.scanlevel"), scanLevel, 4)); + } + if (scanLevel >= 1) { + addGrowthInfo(currenttip, tag); + } + if (scanLevel >= 4) { + addStatInfo(currenttip, tag); + } + addStorageInfo(currenttip, tag); + addTerrainInfo(currenttip, tag); } - if (scanLevel >= 4) { - addStatInfo(currenttip, tag); - } - addStorageInfo(currenttip, tag); - addTerrainInfo(currenttip, tag); }); return currenttip; } private void addGrowthInfo(List currenttip, NBTTagCompound tag) { - currenttip.add(String.format(TITLE_FORMAT, LangUtil.translateG("hud.ic2.msg.growthtitile"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.currentsize"), tag.getInteger("currentSize"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.growthpoints"), tag.getInteger("growthPoints"))); + + currenttip.add(String.format(FORMAT_PARAMS_TITLE, LangUtil.translateG("hud.ic2.msg.growthtitile"))); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.currentsize"), tag.getInteger("currentSize"), tag.getInteger("maxSize"))); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.growthpoints"), tag.getInteger("growthPoints"), tag.getInteger("maxPoints"))); } private void addStatInfo(List currenttip, NBTTagCompound tag) { - currenttip.add(String.format(TITLE_FORMAT, LangUtil.translateG("hud.ic2.msg.stattitle"))); - currenttip.add(String.format(STAT_GROWTH_FORMAT, LangUtil.translateG("hud.ic2.msg.statgrowth"), tag.getInteger("statGrowth"))); - currenttip.add(String.format(STAT_GAIN_FORMAT, LangUtil.translateG("hud.ic2.msg.statgain"), tag.getInteger("statGain"))); - currenttip.add(String.format(STAT_RESISTANCE_FORMAT, LangUtil.translateG("hud.ic2.msg.statresistance"), tag.getInteger("statResistance"))); + currenttip.add(String.format(FORMAT_PARAMS_TITLE, LangUtil.translateG("hud.ic2.msg.stattitle"))); + currenttip.add(String.format(FORMAT_PARAMS_COLORED, "§2", LangUtil.translateG("hud.ic2.msg.statgrowth"), tag.getInteger("statGrowth"), 31)); + currenttip.add(String.format(FORMAT_PARAMS_COLORED, "§6", LangUtil.translateG("hud.ic2.msg.statgain"), tag.getInteger("statGain"), 31)); + currenttip.add(String.format(FORMAT_PARAMS_COLORED, "§3", LangUtil.translateG("hud.ic2.msg.statresistance"), tag.getInteger("statResistance"), 31)); } private void addStorageInfo(List currenttip, NBTTagCompound tag) { - currenttip.add(String.format(TITLE_FORMAT, LangUtil.translateG("hud.ic2.msg.storagetitle"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.storagenutrients"), tag.getInteger("storageNutrients"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.storagewater"), tag.getInteger("storageWater"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.storageweedex"), tag.getInteger("storageWeedEX"))); + currenttip.add(String.format(FORMAT_PARAMS_TITLE, LangUtil.translateG("hud.ic2.msg.storagetitle"))); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.storagenutrients"), tag.getInteger("storageNutrients"), 300)); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.storagewater"), tag.getInteger("storageWater"), 200)); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.storageweedex"), tag.getInteger("storageWeedEX"), 150)); } private void addTerrainInfo(List currenttip, NBTTagCompound tag) { - currenttip.add(String.format(TITLE_FORMAT, LangUtil.translateG("hud.ic2.msg.terrraintitle"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.terrainnutrients"), tag.getInteger("terrainNutrients"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.terrainhumidity"), tag.getInteger("terrainHumidity"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.terrainairquality"), tag.getInteger("terrainAirQuality"))); - currenttip.add(String.format(DEFAULT_FORMAT, LangUtil.translateG("hud.ic2.msg.lightlevel"), tag.getInteger("lightLevel"))); + currenttip.add(String.format(FORMAT_PARAMS_TITLE, LangUtil.translateG("hud.ic2.msg.terrraintitle"))); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.terrainnutrients"), tag.getInteger("terrainNutrients"), 20)); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.terrainhumidity"), tag.getInteger("terrainHumidity"), 20)); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.terrainairquality"), tag.getInteger("terrainAirQuality"), 10)); + currenttip.add(String.format(FORMAT_PARAMS_DEFAULT, LangUtil.translateG("hud.ic2.msg.lightlevel"), tag.getInteger("lightLevel"), 15)); } @Nonnull @Override public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { try { - if (IC2Module.crops.isInstance(te)) { - tag.setInteger("scanLevel", (Integer) IC2Module.cropsScanLevel.invoke(te)); - tag.setInteger("storageNutrients", (Integer) IC2Module.cropsStorageNutrients.invoke(te)); - tag.setInteger("storageWater", (Integer) IC2Module.cropsStorageWater.invoke(te)); - tag.setInteger("storageWeedEX", (Integer) IC2Module.cropsStorageWeedEX.invoke(te)); - tag.setInteger("terrainNutrients", (Integer) IC2Module.cropsTerrainNutrients.invoke(te)); - tag.setInteger("terrainHumidity", (Integer) IC2Module.cropsTerrainHumidity.invoke(te)); - tag.setInteger("terrainAirQuality", (Integer) IC2Module.cropsTerrainAirQuality.invoke(te)); - tag.setInteger("lightLevel", (Integer) IC2Module.cropsLightLevel.invoke(te)); - tag.setInteger("currentSize", (Integer) IC2Module.cropsCurrentSize.invoke(te)); - tag.setInteger("growthPoints", (Integer) IC2Module.cropsGrowthPoints.invoke(te)); - tag.setInteger("statGrowth", (Integer) IC2Module.cropsStatGrowth.invoke(te)); - tag.setInteger("statGain", (Integer) IC2Module.cropsStatGain.invoke(te)); - tag.setInteger("statResistance", (Integer) IC2Module.cropsStatResistance.invoke(te)); + if (IC2Module.getClass("TileEntityCrop").isInstance(te)) { + Object cropCard = IC2Module.invokeMethod("TileEntityCrop.getCrop", te); + if (cropCard != null) { + tag.setInteger("maxSize", (Integer) IC2Module.invokeMethod("CropCard.getMaxSize",cropCard)); + tag.setInteger("maxPoints", (Integer) IC2Module.invokeMethod("CropCard.getGrowthDuration",cropCard, IC2Module.getClass("ICropTile").cast(te))); + } + + tag.setInteger("scanLevel", (Integer) IC2Module.invokeMethod("TileEntityCrop.getScanLevel", te)); + tag.setInteger("storageNutrients", (Integer) IC2Module.invokeMethod("TileEntityCrop.getStorageNutrients", te)); + tag.setInteger("storageWater", (Integer) IC2Module.invokeMethod("TileEntityCrop.getStorageWater", te)); + tag.setInteger("storageWeedEX", (Integer) IC2Module.invokeMethod("TileEntityCrop.getStorageWeedEX", te)); + tag.setInteger("terrainNutrients", (Integer) IC2Module.invokeMethod("TileEntityCrop.getTerrainNutrients", te)); + tag.setInteger("terrainHumidity", (Integer) IC2Module.invokeMethod("TileEntityCrop.getTerrainHumidity", te)); + tag.setInteger("terrainAirQuality", (Integer) IC2Module.invokeMethod("TileEntityCrop.getTerrainAirQuality", te)); + tag.setInteger("lightLevel", (Integer) IC2Module.invokeMethod("TileEntityCrop.getLightLevel", te)); + tag.setInteger("currentSize", (Integer) IC2Module.invokeMethod("TileEntityCrop.getCurrentSize", te)); + tag.setInteger("growthPoints", (Integer) IC2Module.invokeMethod("TileEntityCrop.getGrowthPoints", te)); + tag.setInteger("statGrowth", (Integer) IC2Module.invokeMethod("TileEntityCrop.getStatGrowth", te)); + tag.setInteger("statGain", (Integer) IC2Module.invokeMethod("TileEntityCrop.getStatGain", te)); + tag.setInteger("statResistance", (Integer) IC2Module.invokeMethod("TileEntityCrop.getStatResistance", te)); } } catch (Exception e) { LOGGER.error("Failed to get crop data", e); diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerEUStorages.java b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerEUStorages.java new file mode 100644 index 00000000..1f1a7632 --- /dev/null +++ b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerEUStorages.java @@ -0,0 +1,77 @@ +package mcp.mobius.waila.addons.ic2; + +import java.util.List; +import javax.annotation.Nonnull; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import mcp.mobius.waila.cbcore.LangUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class HUDHandlerEUStorages implements IWailaDataProvider { + + private static final Logger LOGGER = LogManager.getLogger(); + static final IWailaDataProvider INSTANCE = new HUDHandlerEUStorages(); + + private static final String TEXT_LINE_FORMAT = "%s: §f%d§r "; + private static final String ENERGY_INOUT_FORMAT = "%s: §f%d§r EU/t"; + private static final String STORAGE_FORMAT = "%s: §f%d/%d§r %s "; + private static final String PERCENTAGE_FORMAT = "(§f%.1f%%§r)"; + + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (accessor.getTileEntity() == null) return currentTip; + + NBTTagCompound nbtData = accessor.getNBTData(); + int capacity = nbtData.getInteger("capacityEnergy"); + int stored = nbtData.getInteger("storedEnergy"); + + if (config.getConfig("ic2.tier")) { + currentTip.add(String.format(TEXT_LINE_FORMAT, LangUtil.translateG("hud.ic2.msg.tier"), nbtData.getInteger("tier"))); + } + + currentTip.add(String.format(ENERGY_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.input"), nbtData.getInteger("input"))); + currentTip.add(String.format(ENERGY_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.output"), nbtData.getInteger("output"))); + + + if (capacity > 0 && config.getConfig("ic2.storageenergy")) + addStorageLine(currentTip, config, LangUtil.translateG("hud.ic2.msg.storedenergy"), "EU", stored, capacity); + + return currentTip; + } + + @Nonnull + @Override + public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { + try { + if (IC2Module.getClass("TileEntityElectricBlock").isInstance(te)) { + tag.setInteger("tier", (Integer) IC2Module.invokeMethod("TileEntityElectricBlock.getTier", te)); + tag.setInteger("capacityEnergy", (Integer) IC2Module.invokeMethod("TileEntityElectricBlock.getCapacity", te)); + tag.setInteger("storedEnergy", (Integer) IC2Module.invokeMethod("TileEntityElectricBlock.getStored", te)); + tag.setInteger("output", (Integer) IC2Module.invokeMethod("TileEntityElectricBlock.getOutput", te)); + tag.setInteger("input", (Integer) IC2Module.invokeMethod("TileEntityElectricBlock.getOutput", te)); + } + } catch (Exception e) { + LOGGER.error("Failed to get EU storages data", e); + } + return tag; + } + + + private void addStorageLine(List currentTip, IWailaConfigHandler config, String title, String units, int stored, int capacity) { + String capacityLine = ""; + capacityLine += String.format(STORAGE_FORMAT, title, stored, capacity, units); + if (config.getConfig("ic2.percentage")) + capacityLine += String.format(PERCENTAGE_FORMAT, ((float)stored / capacity) * 100); + + currentTip.add(capacityLine); + } +} diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerGenerators.java b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerGenerators.java new file mode 100644 index 00000000..5eeaecb2 --- /dev/null +++ b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerGenerators.java @@ -0,0 +1,83 @@ +package mcp.mobius.waila.addons.ic2; + +import java.util.List; +import javax.annotation.Nonnull; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import mcp.mobius.waila.cbcore.LangUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class HUDHandlerGenerators implements IWailaDataProvider { + + private static final Logger LOGGER = LogManager.getLogger(); + static final IWailaDataProvider INSTANCE = new HUDHandlerGenerators(); + private static final String TEXT_LINE_FORMAT = "%s: §f%d§r "; + private static final String ENERGY_INOUT_FORMAT = "%s: §f%d§r EU/t"; + private static final String STORAGE_FORMAT = "%s: §f%d/%d§r %s "; + private static final String PERCENTAGE_FORMAT = "(§f%.1f%%§r) "; + + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (accessor.getTileEntity() == null) return currentTip; + NBTTagCompound nbtData = accessor.getNBTData(); + + int maxEU = nbtData.getInteger("maxEU"); + int storedEU = nbtData.getInteger("storedEU"); + + int maxFuel = nbtData.getInteger("maxFuel"); + int storedFuel = nbtData.getInteger("storedFuel"); + + if (config.getConfig("ic2.tier")) { + currentTip.add(String.format(TEXT_LINE_FORMAT, LangUtil.translateG("hud.ic2.msg.tier"), nbtData.getInteger("tier"))); + } + + + currentTip.add(String.format(ENERGY_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.output"), nbtData.getInteger("output"))); + + if (maxEU > 0 && config.getConfig("ic2.storageenergy")) { + addStorageLine(currentTip, config, LangUtil.translateG("hud.ic2.msg.storedenergy"), "EU", storedEU, maxEU); + } + + if (maxFuel > 0 && config.getConfig("ic2.storagefuel")) { + addStorageLine(currentTip, config, LangUtil.translateG("hud.ic2.msg.storedfuel"), "", storedFuel, maxFuel); + } + return currentTip; + } + + @Nonnull + @Override + public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { + try { + if (IC2Module.getClass("TileEntityFuelGeneratorBase").isInstance(te)) { + tag.setInteger("tier", (Integer) IC2Module.invokeMethod("TileEntityFuelGeneratorBase.getSourceTier", te)); + tag.setInteger("output", (Integer) IC2Module.invokeMethod("TileEntityFuelGeneratorBase.getOutput", te)); + tag.setInteger("maxEU", (Integer) IC2Module.invokeMethod("TileEntityFuelGeneratorBase.getMaxEU", te)); + tag.setInteger("storedEU", (Integer) IC2Module.invokeMethod("TileEntityFuelGeneratorBase.getStoredEU", te)); + tag.setInteger("maxFuel", Math.round((Float) IC2Module.invokeMethod("TileEntityFuelGeneratorBase.getMaxFuel", te))); + tag.setInteger("storedFuel", Math.round((Float) IC2Module.invokeMethod("TileEntityFuelGeneratorBase.getFuel", te))); + } + } catch (Exception e) { + LOGGER.error("Failed to get generator data", e); + } + return tag; + } + + private void addStorageLine(List currentTip, IWailaConfigHandler config, String title, String units, int stored, int capacity) { + String capacityLine = ""; + capacityLine += String.format(STORAGE_FORMAT, title, stored, capacity, units); + + if (config.getConfig("ic2.percentage")) + capacityLine += String.format(PERCENTAGE_FORMAT, ((float)stored / capacity) * 100); + + currentTip.add(capacityLine); + } +} diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerMachines.java b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerMachines.java new file mode 100644 index 00000000..ee298d16 --- /dev/null +++ b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerMachines.java @@ -0,0 +1,73 @@ +package mcp.mobius.waila.addons.ic2; + +import java.util.List; +import javax.annotation.Nonnull; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import mcp.mobius.waila.cbcore.LangUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class HUDHandlerMachines implements IWailaDataProvider { + + private static final Logger LOGGER = LogManager.getLogger(); + static final IWailaDataProvider INSTANCE = new HUDHandlerMachines(); + private static final String TEXT_LINE_FORMAT = "%s: §f%d§r "; + private static final String ENERGY_INOUT_FORMAT = "%s: §f%d§r EU/t"; + private static final String STORAGE_FORMAT = "%s: §f%d/%d§r %s "; + private static final String PERCENTAGE_FORMAT = "(§f%.1f%%§r) "; + + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (accessor.getTileEntity() == null) return currentTip; + NBTTagCompound nbtData = accessor.getNBTData(); + + int maxEU = nbtData.getInteger("maxEU"); + int storedEU = nbtData.getInteger("storedEU"); + + if (config.getConfig("ic2.tier")) { + currentTip.add(String.format(TEXT_LINE_FORMAT, LangUtil.translateG("hud.ic2.msg.tier"), nbtData.getInteger("tier"))); + } + + currentTip.add(String.format(ENERGY_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.input"), nbtData.getInteger("input"))); + + if (maxEU > 0 && config.getConfig("ic2.storageenergy")) { + addStorageLine(currentTip, config, LangUtil.translateG("hud.ic2.msg.storedenergy"), "EU", storedEU, maxEU); + } + return currentTip; + } + + @Nonnull + @Override + public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { + try { + if (IC2Module.getClass("TileEntityElecMachine").isInstance(te)) { + tag.setInteger("tier", (Integer) IC2Module.invokeMethod("TileEntityElecMachine.getSinkTier", te)); + tag.setInteger("input", (Integer) IC2Module.getField("TileEntityElecMachine.maxInput", te)); + tag.setInteger("maxEU", (Integer) IC2Module.invokeMethod("TileEntityElecMachine.getMaxEU", te)); + tag.setInteger("storedEU", (Integer) IC2Module.invokeMethod("TileEntityElecMachine.getStoredEU", te)); + } + } catch (Exception e) { + LOGGER.error("Failed to get machines data", e); + } + return tag; + } + + private void addStorageLine(List currentTip, IWailaConfigHandler config, String title, String units, int stored, int capacity) { + String capacityLine = ""; + capacityLine += String.format(STORAGE_FORMAT, title, stored, capacity, units); + + if (config.getConfig("ic2.percentage")) + capacityLine += String.format(PERCENTAGE_FORMAT, ((float)stored / capacity) * 100); + + currentTip.add(capacityLine); + } +} diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerSolarGenerators.java b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerSolarGenerators.java new file mode 100644 index 00000000..9bd1c305 --- /dev/null +++ b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerSolarGenerators.java @@ -0,0 +1,54 @@ +package mcp.mobius.waila.addons.ic2; + +import java.util.List; +import javax.annotation.Nonnull; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import mcp.mobius.waila.cbcore.LangUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class HUDHandlerSolarGenerators implements IWailaDataProvider { + + private static final Logger LOGGER = LogManager.getLogger(); + static final IWailaDataProvider INSTANCE = new HUDHandlerSolarGenerators(); + private static final String TEXT_LINE_FORMAT = "%s: §f%d§r "; + private static final String ENERGY_INOUT_FORMAT = "%s: §f%d§r EU/t"; + + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (accessor.getTileEntity() == null) return currentTip; + NBTTagCompound nbtData = accessor.getNBTData(); + + + if (config.getConfig("ic2.tier")) { + currentTip.add(String.format(TEXT_LINE_FORMAT, LangUtil.translateG("hud.ic2.msg.tier"), nbtData.getInteger("tier"))); + } + + currentTip.add(String.format(ENERGY_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.output"), nbtData.getInteger("output"))); + + return currentTip; + } + + @Nonnull + @Override + public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { + try { + if (IC2Module.getClass("TileEntitySolarPanel").isInstance(te)) { + tag.setInteger("tier", (Integer) IC2Module.invokeMethod("TileEntitySolarPanel.getSourceTier", te)); + tag.setInteger("output", (Integer) IC2Module.invokeMethod("TileEntitySolarPanel.getOutput", te)); + } + } catch (Exception e) { + LOGGER.error("Failed to get generator data", e); + } + return tag; + } +} diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerTEGenerator.java b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerTEGenerator.java deleted file mode 100644 index bb449509..00000000 --- a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerTEGenerator.java +++ /dev/null @@ -1,118 +0,0 @@ -package mcp.mobius.waila.addons.ic2; - -import mcp.mobius.waila.api.ITaggedList; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import mcp.mobius.waila.api.IWailaDataProvider; -import mcp.mobius.waila.cbcore.LangUtil; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import javax.annotation.Nonnull; -import java.util.List; - -public class HUDHandlerTEGenerator implements IWailaDataProvider { - - private static final Logger LOGGER = LogManager.getLogger(); - static final IWailaDataProvider INSTANCE = new HUDHandlerTEGenerator(); - - private static final String ENERGY_STORAGE_FORMAT = "%s: §f%d§r / §f%d§r EU"; - private static final String PERCENTAGE_FORMAT = " (§f%d%%§r)"; - private static final String INPUT_OUTPUT_FORMAT = "%s: §f%d §r EU/t"; - private static final String TIER_FORMAT = "%s: §f%d §r"; - - @Nonnull - @Override - public List getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - if (accessor.getTileEntity() == null) { - return currenttip; - } - - NBTTagCompound nbtData = accessor.getNBTData(); - double stored = nbtData.getDouble("stored"); - int input = nbtData.getInteger("input"); - int output = nbtData.getInteger("output"); - long capacity = nbtData.getLong("capacity"); - int tier = nbtData.getInteger("tier"); - - addEnergyStorageInfo(currenttip, config, stored, capacity); - addInputOutputInfo(currenttip, config, input, output); - addTierInfo(currenttip, config, tier); - - return currenttip; - } - - private void addEnergyStorageInfo(List currenttip, IWailaConfigHandler config, double stored, long capacity) { - if (capacity > 0) { - StringBuilder energyLine = new StringBuilder(); - String storedStr = LangUtil.translateG("hud.ic2.msg.stored"); - - if (config.getConfig("ic2.storage")) { - energyLine.append(String.format(ENERGY_STORAGE_FORMAT, storedStr, Math.round(Math.min(stored, capacity)), capacity)); - } - - if (config.getConfig("ic2.percentage")) { - energyLine.append(String.format(PERCENTAGE_FORMAT, Math.round((stored / capacity) * 100))); - } - - ((ITaggedList) currenttip).add(energyLine.toString(), "IEnergyStorage"); - } - } - - private void addInputOutputInfo(List currenttip, IWailaConfigHandler config, int input, int output) { - String inputStr = LangUtil.translateG("hud.ic2.msg.input"); - String outputStr = LangUtil.translateG("hud.ic2.msg.output"); - - if (config.getConfig("ic2.inouteu")) { - if (input > 0) { - currenttip.add(String.format(INPUT_OUTPUT_FORMAT, inputStr, input)); - } - if (output > 0) { - currenttip.add(String.format(INPUT_OUTPUT_FORMAT, outputStr, output)); - } - } - } - - private void addTierInfo(List currenttip, IWailaConfigHandler config, int tier) { - String tierStr = LangUtil.translateG("hud.ic2.msg.tier"); - if (config.getConfig("ic2.tier") && tier > 0) { - currenttip.add(String.format(TIER_FORMAT, tierStr, tier)); - } - } - - @Nonnull - @Override - public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { - try { - if (IC2Module.generator.isInstance(te)) { - - tag.setDouble("stored", IC2Module.generatorStored.getDouble(te)); - tag.setLong("capacity", IC2Module.generatorCapacity.getLong(te)); - tag.setInteger("input", 0); - tag.setInteger("output", IC2Module.generatorOutput.getInt(te)); - tag.setInteger("tier", IC2Module.generatorTier.getInt(te)); - } else if (IC2Module.eBlock.isInstance(te)) { - tag.setDouble("stored", IC2Module.eBlockStored.getDouble(te)); - tag.setLong("capacity", IC2Module.eBlockCapacity.getLong(te)); - tag.setInteger("input", 0); - tag.setInteger("output", IC2Module.eBlockOutput.getInt(te)); - tag.setInteger("tier", IC2Module.eBlockTier.getInt(te)); - } else if (IC2Module.eMachine.isInstance(te)) { - tag.setDouble("stored", 0); - tag.setLong("capacity", 0); - tag.setInteger("input", IC2Module.eMachineInput.getInt(te)); - tag.setInteger("output", 0); - tag.setInteger("tier", IC2Module.eMachineTier.getInt(te)); - } - } catch (Exception e) { - LOGGER.error("Failed to get generator data", e); - } - return tag; - } -} diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerTransformers.java b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerTransformers.java new file mode 100644 index 00000000..c2e169c3 --- /dev/null +++ b/src/main/java/mcp/mobius/waila/addons/ic2/HUDHandlerTransformers.java @@ -0,0 +1,75 @@ +package mcp.mobius.waila.addons.ic2; + +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import mcp.mobius.waila.api.IWailaDataProvider; +import mcp.mobius.waila.cbcore.LangUtil; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import javax.annotation.Nonnull; +import java.util.List; + +public class HUDHandlerTransformers implements IWailaDataProvider { + + private static final Logger LOGGER = LogManager.getLogger(); + static final IWailaDataProvider INSTANCE = new HUDHandlerTransformers(); + + private static final String ENERGY_INOUT_FORMAT = "%s: §f%d §r EU/t"; + private static final String TIER_INOUT_FORMAT = "%s: §f%d -> %d §r"; + private static final String TEXT_LINE_FORMAT = "%s: §f%s §r"; + + @Nonnull + @Override + public List getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + if (accessor.getTileEntity() == null) return currentTip; + + NBTTagCompound nbtData = accessor.getNBTData(); + + int tierIn = nbtData.getInteger("tierIn"); + int tierOut = nbtData.getInteger("tierOut"); + + if (nbtData.hasKey("isActive")) + currentTip.add(String.format(TEXT_LINE_FORMAT, LangUtil.translateG("hud.ic2.msg.mode"), nbtData.getBoolean("isActive") ? LangUtil.translateG("hud.ic2.msg.modestepup") : LangUtil.translateG("hud.ic2.msg.modestepdown"))); + + if (tierIn > 0 || tierOut > 0) { + currentTip.add(String.format(TIER_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.tier"), tierIn, tierOut)); + } + + currentTip.add(String.format(ENERGY_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.input"), nbtData.getInteger("input"))); + currentTip.add(String.format(ENERGY_INOUT_FORMAT, LangUtil.translateG("hud.ic2.msg.output"), nbtData.getInteger("output"))); + + + return currentTip; + } + + @Nonnull + @Override + public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos) { + try { + if (IC2Module.getClass("TileEntityTransformer").isInstance(te)) { + boolean isActive = (Boolean) IC2Module.invokeMethod("TileEntityTransformer.getActive", te); + tag.setBoolean("isActive", isActive); + + tag.setInteger("input", isActive + ? (Integer) IC2Module.getField("TileEntityTransformer.lowOutput", te) + : (Integer) IC2Module.getField("TileEntityTransformer.highOutput", te)); + + tag.setInteger("output", isActive + ? (Integer) IC2Module.getField("TileEntityTransformer.highOutput", te) + : (Integer) IC2Module.getField("TileEntityTransformer.lowOutput", te)); + + tag.setInteger("tierIn", (Integer) IC2Module.invokeMethod("TileEntityTransformer.getSinkTier", te)); + tag.setInteger("tierOut", (Integer) IC2Module.invokeMethod("TileEntityTransformer.getSourceTier", te)); + } + } catch (Exception e) { + LOGGER.error("Failed to get transformer data", e); + } + return tag; + } +} diff --git a/src/main/java/mcp/mobius/waila/addons/ic2/IC2Module.java b/src/main/java/mcp/mobius/waila/addons/ic2/IC2Module.java index d8b4386a..aea3f1b3 100644 --- a/src/main/java/mcp/mobius/waila/addons/ic2/IC2Module.java +++ b/src/main/java/mcp/mobius/waila/addons/ic2/IC2Module.java @@ -1,115 +1,175 @@ package mcp.mobius.waila.addons.ic2; -import mcp.mobius.waila.Waila; +import mcp.mobius.waila.addons.core.BaseModule; import mcp.mobius.waila.api.IWailaPlugin; import mcp.mobius.waila.api.IWailaRegistrar; import mcp.mobius.waila.api.WailaPlugin; import net.minecraftforge.fml.common.Loader; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; @WailaPlugin -public class IC2Module implements IWailaPlugin { - - public static Class generator = null; - public static Field generatorStored = null; - public static Field generatorCapacity = null; - public static Field generatorOutput = null; - public static Field generatorTier = null; - - public static Class eBlock = null; - public static Field eBlockStored = null; - public static Field eBlockCapacity = null; - public static Field eBlockOutput = null; - public static Field eBlockTier = null; - - public static Class eMachine = null; - public static Field eMachineStored = null; - public static Field eMachineCapacity = null; - public static Field eMachineInput = null; - public static Field eMachineTier = null; - - public static Class crops = null; - public static Method cropsStorageNutrients = null; - public static Method cropsStorageWater = null; - public static Method cropsStorageWeedEX = null; - public static Method cropsTerrainNutrients = null; - public static Method cropsTerrainHumidity = null; - public static Method cropsTerrainAirQuality = null; - public static Method cropsLightLevel = null; - public static Method cropsScanLevel = null; - public static Method cropsCurrentSize = null; - public static Method cropsGrowthPoints = null; - public static Method cropsStatGrowth = null; - public static Method cropsStatGain = null; - public static Method cropsStatResistance = null; +public class IC2Module extends BaseModule implements IWailaPlugin { + + private static final Logger LOGGER = LogManager.getLogger(); + + private IWailaRegistrar registrar; @Override public void register(IWailaRegistrar registrar) { if (!Loader.isModLoaded("ic2")) return; + this.registrar = registrar; + + registerCrops(); + registerGenerator(); + registerSolarGenerator(); + registerEUStorage(); + registerTransformer(); + registerMachines(); + registerConfigs(); + + } + + private void registerCrops() { + try { + String basePackageName = "ic2.core.block.crop"; + String baseClassName = "TileEntityCrop"; + + registerClass("ic2.core.platform.lang.components.base.LocaleComp"); + registerClass("ic2.api.crops.ICropTile"); + registerClass("ic2.api.crops.CropCard"); + registerClass("ic2.core.block.crop.Ic2Crops"); + registerClass(basePackageName + "." + baseClassName); + + registerMethod("LocaleComp", "getLocalized"); + + registerMethod("CropCard", "getGrowthDuration", getClass("ICropTile")); + registerMethod("CropCard", "getSeeds", getClass("ICropTile")); + registerMethod("CropCard", "getMaxSize"); + + registerField("Ic2Crops", "instance"); + registerMethod("Ic2Crops", "getCropName", getClass("CropCard")); + registerMethod("Ic2Crops", "getDisplayItem", getClass("CropCard")); + + registerMethod(baseClassName, "getCrop"); + registerMethod(baseClassName, "getScanLevel"); + registerMethod(baseClassName, "getStorageNutrients"); + registerMethod(baseClassName, "getStorageWater"); + registerMethod(baseClassName, "getStorageWeedEX"); + registerMethod(baseClassName, "getTerrainNutrients"); + registerMethod(baseClassName, "getTerrainHumidity"); + registerMethod(baseClassName, "getTerrainAirQuality"); + registerMethod(baseClassName, "getLightLevel"); + registerMethod(baseClassName, "getCurrentSize"); + registerMethod(baseClassName, "getGrowthPoints"); + registerMethod(baseClassName, "getStatGrowth"); + registerMethod(baseClassName, "getStatGain"); + registerMethod(baseClassName, "getStatResistance"); + + this.registrar.registerStackProvider(HUDHandlerCrops.INSTANCE, getClass(baseClassName)); + this.registrar.registerHeadProvider(HUDHandlerCrops.INSTANCE, getClass(baseClassName)); + this.registrar.registerBodyProvider(HUDHandlerCrops.INSTANCE, getClass(baseClassName)); + this.registrar.registerNBTProvider(HUDHandlerCrops.INSTANCE, getClass(baseClassName)); + } catch (Exception e) { + LOGGER.error("[IC2] Error while loading Crops hooks.", e); + } + } + + + private void registerGenerator() { + String packageName = "ic2.core.block.base.tile"; + String className = "TileEntityFuelGeneratorBase"; + try { + registerClass(packageName + "." + className); + registerMethod(className, "getStoredEU"); + registerMethod(className, "getMaxEU"); + registerMethod(className, "getOutput"); + registerMethod(className, "getSourceTier"); + registerMethod(className, "getFuel"); + registerMethod(className, "getMaxFuel"); + + this.registrar.registerBodyProvider(HUDHandlerGenerators.INSTANCE, getClass(className)); + this.registrar.registerNBTProvider(HUDHandlerGenerators.INSTANCE, getClass(className)); + } catch (Exception e) { + LOGGER.error("[IC2] Error while loading Generator hooks.", e); + } + } + + + private void registerSolarGenerator() { + String packageName = "ic2.core.block.generator.tile"; + String className = "TileEntitySolarPanel"; + try { + registerClass(packageName + "." + className); + registerMethod(className, "getOutput"); + registerMethod(className, "getSourceTier"); + + this.registrar.registerBodyProvider(HUDHandlerSolarGenerators.INSTANCE, getClass(className)); + this.registrar.registerNBTProvider(HUDHandlerSolarGenerators.INSTANCE, getClass(className)); + } catch (Exception e) { + LOGGER.error("[IC2] Error while loading Solar Generator hooks.", e); + } + } + + + private void registerEUStorage() { + String packageName = "ic2.core.block.base.tile"; + String className = "TileEntityElectricBlock"; + try { + registerClass(packageName + "." + className); + registerMethod(className, "getStored"); + registerMethod(className, "getCapacity"); + registerMethod(className, "getOutput"); + registerMethod(className, "getTier"); + + this.registrar.registerBodyProvider(HUDHandlerEUStorages.INSTANCE, getClass(className)); + this.registrar.registerNBTProvider(HUDHandlerEUStorages.INSTANCE, getClass(className)); + + } catch (Exception e) { + LOGGER.error("[IC2] Error while loading EU Storage hooks.", e); + } + } + + private void registerTransformer() { + String packageName = "ic2.core.block.base.tile"; + String className = "TileEntityTransformer"; try { - /* Generators */ - generator = Class.forName("ic2.core.block.base.tile.TileEntityGeneratorBase"); - generatorStored = generator.getDeclaredField("storage"); - generatorCapacity = generator.getDeclaredField("maxStorage"); - generatorOutput = generator.getDeclaredField("production"); - generatorTier = generator.getDeclaredField("tier"); - - registrar.registerBodyProvider(HUDHandlerTEGenerator.INSTANCE, generator); - registrar.registerNBTProvider(HUDHandlerTEGenerator.INSTANCE, generator); - - /* EU Storages */ - eBlock = Class.forName("ic2.core.block.base.tile.TileEntityElectricBlock"); - eBlockStored = eBlock.getDeclaredField("energy"); - eBlockCapacity = eBlock.getDeclaredField("maxEnergy"); - eBlockOutput = eBlock.getDeclaredField("output"); - eBlockTier = eBlock.getDeclaredField("tier"); - - registrar.registerBodyProvider(HUDHandlerTEGenerator.INSTANCE, eBlock); - registrar.registerNBTProvider(HUDHandlerTEGenerator.INSTANCE, eBlock); - - /* Machines */ - eMachine = Class.forName("ic2.core.block.base.tile.TileEntityElecMachine"); - // TODO: Вырезать или оставить - // stored и capacity понадобятся в будущем... Или нет - eMachineStored = eMachine.getDeclaredField("energy"); - eMachineCapacity = eMachine.getDeclaredField("maxEnergy"); - eMachineInput = eMachine.getDeclaredField("maxInput"); - eMachineTier = eMachine.getDeclaredField("tier"); - - registrar.registerBodyProvider(HUDHandlerTEGenerator.INSTANCE, eMachine); - registrar.registerNBTProvider(HUDHandlerTEGenerator.INSTANCE, eMachine); - - /* Crops */ - crops = Class.forName("ic2.core.block.crop.TileEntityCrop"); - - cropsStorageNutrients = crops.getDeclaredMethod("getStorageNutrients"); - cropsStorageWater = crops.getDeclaredMethod("getStorageWater"); - cropsStorageWeedEX = crops.getDeclaredMethod("getStorageWeedEX"); - cropsTerrainNutrients = crops.getDeclaredMethod("getTerrainNutrients"); - cropsTerrainHumidity = crops.getDeclaredMethod("getTerrainHumidity"); - cropsTerrainAirQuality = crops.getDeclaredMethod("getTerrainAirQuality"); - cropsLightLevel = crops.getDeclaredMethod("getLightLevel"); - cropsScanLevel = crops.getDeclaredMethod("getScanLevel"); - cropsCurrentSize = crops.getDeclaredMethod("getCurrentSize"); - cropsGrowthPoints = crops.getDeclaredMethod("getGrowthPoints"); - cropsStatGrowth = crops.getDeclaredMethod("getStatGrowth"); - cropsStatGain = crops.getDeclaredMethod("getStatGain"); - cropsStatResistance = crops.getDeclaredMethod("getStatResistance"); - - registrar.registerBodyProvider(HUDHandlerCrops.INSTANCE, crops); - registrar.registerNBTProvider(HUDHandlerCrops.INSTANCE, crops); - - /* Config */ - registrar.addConfig("Industrial Craft 2", "ic2.storage", true); - registrar.addConfig("Industrial Craft 2", "ic2.percentage", true); - registrar.addConfig("Industrial Craft 2", "ic2.inouteu", true); - registrar.addConfig("Industrial Craft 2", "ic2.tier", true); - registrar.addConfig("Industrial Craft 2", "ic2.crops", true); + registerClass(packageName + "." + className); + registerField(className, "lowOutput"); + registerField(className, "highOutput"); + registerMethod(className, "getActive"); + registerMethod(className, "getSinkTier"); + registerMethod(className, "getSourceTier"); + this.registrar.registerBodyProvider(HUDHandlerTransformers.INSTANCE, getClass(className)); + this.registrar.registerNBTProvider(HUDHandlerTransformers.INSTANCE, getClass(className)); + } catch (Exception e) { + LOGGER.error("[IC2] Error while loading Transformer hooks.", e); + } + } + private void registerMachines() { + String packageName = "ic2.core.block.base.tile"; + String className = "TileEntityElecMachine"; + try { + registerClass(packageName + "." + className); + registerMethod(className, "getSinkTier"); + registerField(className, "maxInput"); + registerMethod(className, "getMaxEU"); + registerMethod(className, "getStoredEU"); + this.registrar.registerBodyProvider(HUDHandlerMachines.INSTANCE, getClass(className)); + this.registrar.registerNBTProvider(HUDHandlerMachines.INSTANCE, getClass(className)); } catch (Exception e) { - Waila.LOGGER.warn("[Industrial Craft 2] Error while loading generator hooks.", e); + LOGGER.error("[IC2] Error while loading Machines hooks.", e); } + + } + + private void registerConfigs() { + this.registrar.addConfig("Industrial Craft 2", "ic2.storage", true); + this.registrar.addConfig("Industrial Craft 2", "ic2.percentage", true); + this.registrar.addConfig("Industrial Craft 2", "ic2.inouteu", true); + this.registrar.addConfig("Industrial Craft 2", "ic2.tier", true); + this.registrar.addConfig("IC2 Crops", "ic2.crops", true); + this.registrar.addConfig("IC2 Crops", "ic2.crops.sneakshow", true); } } diff --git a/src/main/java/mcp/mobius/waila/addons/thermalexpansion/HUDHandlerCache.java b/src/main/java/mcp/mobius/waila/addons/thermalexpansion/HUDHandlerCache.java index fd8e39ad..658e36c7 100644 --- a/src/main/java/mcp/mobius/waila/addons/thermalexpansion/HUDHandlerCache.java +++ b/src/main/java/mcp/mobius/waila/addons/thermalexpansion/HUDHandlerCache.java @@ -31,7 +31,7 @@ public List getWailaHead(ItemStack itemStack, List currenttip, I TileEntity te = accessor.getTileEntity(); NBTTagCompound tag = accessor.getNBTData(); if (accessor.getNBTData().hasKey("Item")) - storedItem = (ItemStack) ThermalExpansionModule.readItemStackFromNBT.invoke(te, tag.getCompoundTag("Item")); + storedItem = (ItemStack) ThermalExpansionModule.invokeMethod("ItemHelper.readItemStackFromNBT", te, tag.getCompoundTag("Item")); String name = currenttip.get(0); @@ -65,7 +65,7 @@ public List getWailaBody(ItemStack itemStack, List currenttip, I ItemStack storedItem = null; if (tag.hasKey("Item")) { - storedItem = (ItemStack) ThermalExpansionModule.readItemStackFromNBT.invoke(te, tag.getCompoundTag("Item")); + storedItem = (ItemStack) ThermalExpansionModule.invokeMethod("ItemHelper.readItemStackFromNBT", te, tag.getCompoundTag("Item")); } int stored = 0; @@ -75,9 +75,8 @@ public List getWailaBody(ItemStack itemStack, List currenttip, I if (storedItem != null) { currenttip.add(storedStr + ": " + stored); -// currenttip.add("Stored: " + stored + "/" + maxStored); //TODO: add maxStored value } else currenttip.add(capacityStr + ": " + maxStored); - } catch (ReflectiveOperationException e) { + } catch (Exception e) { e.printStackTrace(); } @@ -91,9 +90,8 @@ public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCom if (te != null) te.writeToNBT(tag); try { - tag.setInteger("MaxStored", 0); //TODO: add maxStored value - tag.setInteger("Stored", (Integer) ThermalExpansionModule.tileCacheGetStored.invoke(te)); - } catch (ReflectiveOperationException e) { + tag.setInteger("Stored", (Integer) ThermalExpansionModule.invokeMethod("TileCache.getStoredCount",te)); + } catch (Exception e) { e.printStackTrace(); } return tag; diff --git a/src/main/java/mcp/mobius/waila/addons/thermalexpansion/ThermalExpansionModule.java b/src/main/java/mcp/mobius/waila/addons/thermalexpansion/ThermalExpansionModule.java index 41ccbc26..9f394a74 100644 --- a/src/main/java/mcp/mobius/waila/addons/thermalexpansion/ThermalExpansionModule.java +++ b/src/main/java/mcp/mobius/waila/addons/thermalexpansion/ThermalExpansionModule.java @@ -1,6 +1,7 @@ package mcp.mobius.waila.addons.thermalexpansion; import mcp.mobius.waila.Waila; +import mcp.mobius.waila.addons.core.BaseModule; import mcp.mobius.waila.api.IWailaPlugin; import mcp.mobius.waila.api.IWailaRegistrar; import mcp.mobius.waila.api.WailaPlugin; @@ -10,27 +11,21 @@ import java.lang.reflect.Method; @WailaPlugin -public class ThermalExpansionModule implements IWailaPlugin { +public class ThermalExpansionModule extends BaseModule implements IWailaPlugin { - public static Class cofhItemHelper = null; - public static Method readItemStackFromNBT = null; - - public static Class tileCache = null; - public static Method tileCacheGetStored = null; public void register(IWailaRegistrar registrar) { if (!Loader.isModLoaded("thermalexpansion") || !Loader.isModLoaded("cofhcore")) return; try { - cofhItemHelper = Class.forName("cofh.core.util.helpers.ItemHelper"); - readItemStackFromNBT = cofhItemHelper.getMethod("readItemStackFromNBT", NBTTagCompound.class); - + registerClass("cofh.core.util.helpers.ItemHelper"); + registerClass("cofh.thermalexpansion.block.storage.TileCache"); + registerMethod("ItemHelper", "readItemStackFromNBT", NBTTagCompound.class); + registerMethod("TileCache", "getStoredCount"); - tileCache = Class.forName("cofh.thermalexpansion.block.storage.TileCache"); - tileCacheGetStored = tileCache.getDeclaredMethod("getStoredCount"); - registrar.registerHeadProvider(HUDHandlerCache.INSTANCE, tileCache); - registrar.registerBodyProvider(HUDHandlerCache.INSTANCE, tileCache); - registrar.registerNBTProvider(HUDHandlerCache.INSTANCE, tileCache); + registrar.registerHeadProvider(HUDHandlerCache.INSTANCE, getClass("TileCache")); + registrar.registerBodyProvider(HUDHandlerCache.INSTANCE, getClass("TileCache")); + registrar.registerNBTProvider(HUDHandlerCache.INSTANCE, getClass("TileCache")); registrar.addConfig("Thermal Expansion", "thermalexpansion.cache"); } catch (Exception e) { diff --git a/src/main/java/mcp/mobius/waila/overlay/OverlayRenderer.java b/src/main/java/mcp/mobius/waila/overlay/OverlayRenderer.java index 41fddd12..ead85b5e 100644 --- a/src/main/java/mcp/mobius/waila/overlay/OverlayRenderer.java +++ b/src/main/java/mcp/mobius/waila/overlay/OverlayRenderer.java @@ -91,7 +91,7 @@ public static void renderOverlay(Tooltip tooltip) { GlStateManager.enableRescaleNormal(); if (tooltip.hasIcon() && !tooltip.stack.isEmpty()) - DisplayUtil.renderStack(event.getX() + 5, event.getY() + event.getHeight() / 2 - 8, tooltip.stack); + DisplayUtil.renderStack(event.getX() + 5, event.getY() + 5, tooltip.stack); MinecraftForge.EVENT_BUS.post(new WailaRenderEvent.Post(event.getX(), event.getY(), event.getWidth(), event.getHeight())); @@ -163,4 +163,4 @@ public static void drawTooltipBox(int x, int y, int w, int h, int bg, int grad1, DisplayUtil.drawGradientRect(x + 1, y + 1, w - 1, 1, grad1, grad1); DisplayUtil.drawGradientRect(x + 1, y + h - 1, w - 1, 1, grad2, grad2); } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/waila/lang/en_US.lang b/src/main/resources/assets/waila/lang/en_US.lang index 784d8126..85bb0f6d 100644 --- a/src/main/resources/assets/waila/lang/en_US.lang +++ b/src/main/resources/assets/waila/lang/en_US.lang @@ -65,11 +65,18 @@ hud.msg.offers=Offers hud.msg.demands=Demands hud.msg.career=Career: %s -hud.ic2.msg.stored=Stored +hud.ic2.msg.storedenergy=Energy +hud.ic2.msg.storedfuel=Fuel +hud.ic2.msg.mode=Mode +hud.ic2.msg.modestepup=Step-up +hud.ic2.msg.modestepdown=Step-down hud.ic2.msg.input=Input hud.ic2.msg.output=Output hud.ic2.msg.tier=Tier +hud.ic2.msg.unknown=Unknown crop +hud.ic2.msg.sneaktip=Sneak for more details +hud.ic2.msg.scanlevel=Scan level hud.ic2.msg.growthtitile=Growth hud.ic2.msg.currentsize=Stage hud.ic2.msg.growthpoints=Points @@ -114,6 +121,8 @@ option.general.registry=Show registry data option.capability.tankinfo=Show tank data option.capability.energyinfo=Show energy data +option.ic2.crops.sneakshow=Show while sneak +option.ic2.crops=Show crop info option.ic2.storage=Show EU storage option.ic2.percentage=EU percentage option.ic2.inouteu=Input/Output EU diff --git a/src/main/resources/assets/waila/lang/ru_RU.lang b/src/main/resources/assets/waila/lang/ru_RU.lang index b15e6148..554951bf 100644 --- a/src/main/resources/assets/waila/lang/ru_RU.lang +++ b/src/main/resources/assets/waila/lang/ru_RU.lang @@ -65,11 +65,18 @@ hud.msg.offers=Предложения hud.msg.demands=Запросы hud.msg.career=Карьера: %s -hud.ic2.msg.stored=Хранится -hud.ic2.msg.input=Вход -hud.ic2.msg.output=Выход +hud.ic2.msg.storedenergy=Энергия +hud.ic2.msg.storedfuel=Топливо +hud.ic2.msg.mode=Режим +hud.ic2.msg.modestepup=Повышение +hud.ic2.msg.modestepdown=Понижение +hud.ic2.msg.input=Макс. Вход +hud.ic2.msg.output=Макс. Выход hud.ic2.msg.tier=Энергоуровень +hud.ic2.msg.unknown=Неизвестный посев +hud.ic2.msg.sneaktip=Присесть для подробной информации +hud.ic2.msg.scanlevel=Сканер hud.ic2.msg.growthtitile=Рост hud.ic2.msg.currentsize=Этап hud.ic2.msg.growthpoints=Очки @@ -114,6 +121,8 @@ option.general.registry=Показать данные реестра option.capability.tankinfo=Показать данные резервуара option.capability.energyinfo=Показать данные энергии +option.ic2.crops.sneakshow=Присесть для информации +option.ic2.crops=Показывать информацию о семенах option.ic2.storage=Заряд EU option.ic2.percentage=EU в процентах option.ic2.inouteu=Макс. вход/выход EU