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 ba55f9a commit 716bb28
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 5 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
@@ -0,0 +1,75 @@
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.screens.Screen;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
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.getEntity() == null || event.getEntity().isDeadOrDying()) {
return;
}

IKnowledgeProvider provider = Util.getKnowledgeProvider(event.getEntity());
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 (Component 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(Component.literal(" (").setStyle(ColorStyle.WHITE)).append(hasKnowledge ?
Component.literal("✓").setStyle(ColorStyle.GREEN) : Component.literal("✗").setStyle(ColorStyle.RED)
).append(Component.literal(")").setStyle(ColorStyle.WHITE)));
} else {
// if we can't find an existing EMC element, add a new more detailed element
event.getToolTip().add(hasKnowledge ?
Component.translatable("text.projectexpansion.learned").setStyle(ColorStyle.GREEN) : Component.translatable("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.block.entity.BlockEntityAdvancedAlchemicalChest;
import cool.furry.mc.forge.projectexpansion.rendering.ChestRenderer;
Expand All @@ -14,8 +15,7 @@
import net.minecraftforge.registries.RegistryObject;

@Mod.EventBusSubscriber(modid = Main.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class ClientHandler {

public class RenderingEvent {
@SubscribeEvent
public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event) {
for(DyeColor color: DyeColor.values()) {
Expand Down

0 comments on commit 716bb28

Please sign in to comment.