Skip to content

Commit

Permalink
more obvious "learned" tooltip
Browse files Browse the repository at this point in the history
  • Loading branch information
DonovanDMC committed Jan 26, 2023
1 parent 02a990a commit 35634d3
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,6 @@
"gui.projectexpansion.config.limit_emc_link_vendor.desc": "If EMC Link Right-Click functionality should be Limited by Tier or Not.",
"gui.projectexpansion.config.transmutation_interface_item_count": "Transmutation Interface Item Count",
"gui.projectexpansion.config.transmutation_interface_item_count.desc": "The amount of items that the transmutation interface will report to have. You likely want this to be at least 64.",
"gui.projectexpansion.config.use_old_values": "Use Old Values",
"gui.projectexpansion.config.use_old_values.desc": "Use the previous emc generation values (much more unbalanced)",
"gui.projectexpansion.config.enable_fluid_efficiency": "Enable Fluid Efficiency",
"gui.projectexpansion.config.enable_fluid_efficiency.desc": "If fluid efficiency should be enabled.",
"gui.projectexpansion.config.collector_multiplier": "Collector Multiplier",
Expand All @@ -196,6 +194,10 @@
"gui.projectexpansion.config.infinite_fuel_burn_time.desc": "The ticks each usage of the infinite fuel item will give.",
"gui.projectexpansion.config.infinite_steak_cost": "Infinite Steak Cost",
"gui.projectexpansion.config.infinite_steak_cost.desc": "The cost of using the infinite steak item.",
"gui.projectexpansion.config.persist_enchanted_books_only": "Persist Enchanted Books Only",
"gui.projectexpansion.config.persist_enchanted_books_only.desc": "If ProjectE's processors.EnchantmentProcessor.persistent option should only include enchanted books.",
"gui.projectexpansion.config.enable_learned_tooltip": "Enable Learned Tooltip",
"gui.projectexpansion.config.enable_learned_tooltip.desc": "If a tooltip should be shown on items which can be learned, denoting if the item has been learned or not. Note: ProjectE's client.shiftEmcToolTips applies to this.",
"gui.projectexpansion.advanced_alchemical_chest.title": "Alchemical Chest",
"item.projectexpansion.compressed_collector.tooltip": "Crafting Ingredient",
"item.projectexpansion.basic_compressed_collector": "Basic Compressed Collector [MK 1]",
Expand Down Expand Up @@ -288,6 +290,8 @@
"text.projectexpansion.nbt_filter.disable": "NBT Filter Disabled",
"text.projectexpansion.nbt_filter.enable": "NBT Filter Enabled",
"text.projectexpansion.failed_to_get_knowledge_provider": "Failed to get knowledge provider for %s.",
"text.projectexpansion.learned": "Learned ✓",
"text.projectexpansion.notLearned": "Not Learned ✗",
"enchantment.projectexpansion.alchemical_collection": "Alchemical Collection",
"enchantment.projectexpansion.alchemical_collection.desc": "Converts any mined items with an emc value directly into emc.",
"sounds.projectexpansion.knowledge_sharing_book.store": "Knowledge Stored",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,6 @@ public final class Config {
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteFuelBurnTime = Builder.comment("The ticks each usage of the infinite fuel item will give.").defineInRange("infiniteFuelBurnTime", 1600, 1, Integer.MAX_VALUE);
public static final ForgeConfigSpec.ConfigValue<Integer> infiniteSteakCost = Builder.comment("The cost of using the infinite steak item.").defineInRange("infiniteSteakCost", 64, 1, Integer.MAX_VALUE);
public static final ForgeConfigSpec.ConfigValue<Boolean> persistEnchantedBooksOnly = Builder.comment("If ProjectE's processors.EnchantmentProcessor.persistent option should only include enchanted books.").define("persistEnchantedBooksOnly", false);
public static final ForgeConfigSpec.ConfigValue<Boolean> enabledLearnedTooltip = Builder.comment("If a tooltip should be shown on items which can be learned, denoting if the item has been learned or not. Note: ProjectE's client.shiftEmcToolTips applies to this.").define("enabledLearnedTooltip", true);
static { Spec = Builder.build(); }
}
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,12 @@ protected void init() {
(__, newValue) -> Config.persistEnchantedBooksOnly.set(newValue)
));

optionsRowList.addBig(new BooleanOption(
"gui.projectexpansion.config.enable_learned_tooltip",
__ -> Config.enabledLearnedTooltip.get(),
(__, newValue) -> Config.enabledLearnedTooltip.set(newValue)
));

addButton(new Button((width - BUTTON_WIDTH) / 2, height - DONE_BUTTON_TOP_OFFSET, BUTTON_WIDTH, BUTTON_HEIGHT, new TranslationTextComponent("gui.done"), (button) -> minecraft.pushGuiLayer(parentScreen)));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package cool.furry.mc.forge.projectexpansion.events;

import cool.furry.mc.forge.projectexpansion.Main;
import cool.furry.mc.forge.projectexpansion.config.Config;
import cool.furry.mc.forge.projectexpansion.util.ColorStyle;
import cool.furry.mc.forge.projectexpansion.util.Util;
import moze_intel.projecte.api.ItemInfo;
import moze_intel.projecte.api.ProjectEAPI;
import moze_intel.projecte.api.capabilities.IKnowledgeProvider;
import moze_intel.projecte.config.ProjectEConfig;
import moze_intel.projecte.utils.EMCHelper;
import moze_intel.projecte.utils.text.PELang;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

import java.util.concurrent.atomic.AtomicInteger;

@Mod.EventBusSubscriber(modid = Main.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ItemTooltipEvent {
// we need to be lower priority than ProjectE's listener so the EMC component is present when we get the event
@SubscribeEvent(priority = EventPriority.LOW)
public static void itemToolTipEvent(net.minecraftforge.event.entity.player.ItemTooltipEvent event) {
if(!Config.enabledLearnedTooltip.get() || (ProjectEConfig.client.shiftEmcToolTips.get() && !Screen.hasShiftDown())) {
return;
}

ItemStack stack = event.getItemStack();
boolean hasValue = ProjectEAPI.getEMCProxy().hasValue(stack);
if(stack.isEmpty() || !hasValue || event.getPlayer() == null || event.getPlayer().isDeadOrDying()) {
return;
}

IKnowledgeProvider provider = Util.getKnowledgeProvider(event.getPlayer());
if(provider == null) {
return;
}

boolean hasKnowledge = provider.hasKnowledge(ItemInfo.fromStack(stack));
long value = ProjectEAPI.getEMCProxy().getValue(stack);
AtomicInteger index = new AtomicInteger(-1);
AtomicInteger peTransmutableIndex = new AtomicInteger(-1);
for (ITextComponent c : event.getToolTip()) {
if (c.getString().equals(EMCHelper.getEmcTextComponent(value, 1).getString())) {
index.set(event.getToolTip().indexOf(c));
continue;
}

if(c.getString().equals(I18n.get(PELang.EMC_HAS_KNOWLEDGE.getTranslationKey()))) {
peTransmutableIndex.set(event.getToolTip().indexOf(c));
}
}

// attempt to add a minimal notice
if(index.get() != -1) {
event.getToolTip().set(index.get(), event.getToolTip().get(index.get()).copy().append(new StringTextComponent(" (").setStyle(ColorStyle.WHITE)).append(hasKnowledge ?
new StringTextComponent("✓").setStyle(ColorStyle.GREEN) : new StringTextComponent("✗").setStyle(ColorStyle.RED)
).append(new StringTextComponent(")").setStyle(ColorStyle.WHITE)));
} else {
// if we can't find an existing EMC element, add a new more detailed element
event.getToolTip().add(hasKnowledge ?
new TranslationTextComponent("text.projectexpansion.learned").setStyle(ColorStyle.GREEN) : new TranslationTextComponent("text.projectexpansion.notLearned").setStyle(ColorStyle.RED)
);
}

if(peTransmutableIndex.get() != -1) {
event.getToolTip().remove(peTransmutableIndex.get());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package cool.furry.mc.forge.projectexpansion;
package cool.furry.mc.forge.projectexpansion.events;

import cool.furry.mc.forge.projectexpansion.Main;
import cool.furry.mc.forge.projectexpansion.block.BlockAdvancedAlchemicalChest;
import cool.furry.mc.forge.projectexpansion.config.ConfigMenu;
import cool.furry.mc.forge.projectexpansion.rendering.ChestRenderer;
Expand All @@ -18,7 +19,7 @@
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;

@Mod.EventBusSubscriber(modid = Main.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class ClientHandler {
public class RenderingEvent {
@SubscribeEvent
public static void clientSetup(FMLClientSetupEvent event) {
ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (mc, screen) -> new ConfigMenu(screen));
Expand Down

0 comments on commit 35634d3

Please sign in to comment.