Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/generated/resources/assets/bloodmagic/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,15 @@
"tooltip.bloodmagic.ritualReader.set_area": "Define Area",
"tooltip.bloodmagic.ritualReader.set_will_types": "Set Will Consumed",
"tooltip.bloodmagic.sacrificialdagger.desc": "Just a prick of the finger will suffice...",
"tooltip.bloodmagic.sentient.aoe": "AoE radius: %s",
"tooltip.bloodmagic.sentient.attuned": "Attuned: %s",
"tooltip.bloodmagic.sentient.bonusDamage": "%s bonus damage",
"tooltip.bloodmagic.sentient.inactive": "Inactive (gather more will)",
"tooltip.bloodmagic.sentient.levelPool": "Level %d (%s will)",
"tooltip.bloodmagic.sentient.rider.corrosive": "On hit: Wither %ss (Lv %d)",
"tooltip.bloodmagic.sentient.rider.digspeed": "Mining Speed: %s",
"tooltip.bloodmagic.sentient.rider.steadfast": "On kill: Absorption %ss",
"tooltip.bloodmagic.sentient.rider.vengeful": "Movement Speed: %s",
"tooltip.bloodmagic.sentientAxe.desc": "Uses demon will to unleash its full potential.",
"tooltip.bloodmagic.sentientPickaxe.desc": "Uses demon will to unleash its full potential.",
"tooltip.bloodmagic.sentientScythe.desc": "Uses demon will to unleash its full potential.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,16 @@ protected void addTranslations()
add("tooltip.bloodmagic.currentBaseType.destructive", "Destructive");
add("tooltip.bloodmagic.currentBaseType.vengeful", "Vengeful");
add("tooltip.bloodmagic.currentBaseType.steadfast", "Steadfast");

add("tooltip.bloodmagic.sentient.attuned", "Attuned: %s");
add("tooltip.bloodmagic.sentient.levelPool", "Level %d (%s will)");
add("tooltip.bloodmagic.sentient.inactive", "Inactive (gather more will)");
add("tooltip.bloodmagic.sentient.bonusDamage", "%s bonus damage");
add("tooltip.bloodmagic.sentient.aoe", "AoE radius: %s");
add("tooltip.bloodmagic.sentient.rider.corrosive", "On hit: Wither %ss (Lv %d)");
add("tooltip.bloodmagic.sentient.rider.steadfast", "On kill: Absorption %ss");
add("tooltip.bloodmagic.sentient.rider.vengeful", "Movement Speed: %s");
add("tooltip.bloodmagic.sentient.rider.digspeed", "Mining Speed: %s");
add("tooltip.bloodmagic.sacrificialdagger.desc", "Just a prick of the finger will suffice...");
add("tooltip.bloodmagic.slate.desc", "Infused stone inside of a Blood Altar.");
add("tooltip.bloodmagic.inscriber.desc", "The writing is on the wall...");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Difficulty;
Expand Down Expand Up @@ -300,8 +301,22 @@ public void appendHoverText(ItemStack stack, Level world, List<Component> toolti
if (!stack.hasTag())
return;

tooltip.add(Component.translatable("tooltip.bloodmagic.sentientAxe.desc").withStyle(ChatFormatting.GRAY));
tooltip.add(Component.translatable("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase(Locale.ROOT)).withStyle(ChatFormatting.GRAY));
EnumDemonWillType type = getCurrentType(stack);
Player player = Minecraft.getInstance().player;
double will = player != null ? PlayerDemonWillHandler.getTotalDemonWill(type, player) : 0;
int level = getLevel(stack, will);

SentientTooltipHelper.appendSentientTooltip(
tooltip,
"tooltip.bloodmagic.sentientAxe.desc",
type,
level,
getExtraDamage(type, level),
null,
level >= 0 ? defaultDigSpeedAdded[level] : null,
poisonTime[Math.max(0, level)], poisonLevel[Math.max(0, level)],
absorptionTime[Math.max(0, level)],
type == EnumDemonWillType.VENGEFUL ? movementSpeed[Math.max(0, level)] : 0);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Difficulty;
Expand Down Expand Up @@ -299,9 +300,22 @@ public void appendHoverText(ItemStack stack, Level world, List<Component> toolti
if (!stack.hasTag())
return;

// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientSword.desc"))));
tooltip.add(Component.translatable("tooltip.bloodmagic.sentientPickaxe.desc").withStyle(ChatFormatting.GRAY));
tooltip.add(Component.translatable("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase(Locale.ROOT)).withStyle(ChatFormatting.GRAY));
EnumDemonWillType type = getCurrentType(stack);
Player player = Minecraft.getInstance().player;
double will = player != null ? PlayerDemonWillHandler.getTotalDemonWill(type, player) : 0;
int level = getLevel(stack, will);

SentientTooltipHelper.appendSentientTooltip(
tooltip,
"tooltip.bloodmagic.sentientPickaxe.desc",
type,
level,
getExtraDamage(type, level),
null,
level >= 0 ? defaultDigSpeedAdded[level] : null,
poisonTime[Math.max(0, level)], poisonLevel[Math.max(0, level)],
absorptionTime[Math.max(0, level)],
type == EnumDemonWillType.VENGEFUL ? movementSpeed[Math.max(0, level)] : 0);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
Expand Down Expand Up @@ -636,8 +637,22 @@ public void appendHoverText(ItemStack stack, Level world, List<Component> toolti
if (!stack.hasTag())
return;

tooltip.add(Component.translatable("tooltip.bloodmagic.sentientScythe.desc").withStyle(ChatFormatting.GRAY));
tooltip.add(Component.translatable("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase(Locale.ROOT)).withStyle(ChatFormatting.GRAY));
EnumDemonWillType type = getCurrentType(stack);
Player player = Minecraft.getInstance().player;
double will = player != null ? PlayerDemonWillHandler.getTotalDemonWill(type, player) : 0;
int level = getLevel(stack, will);

SentientTooltipHelper.appendSentientTooltip(
tooltip,
"tooltip.bloodmagic.sentientScythe.desc",
type,
level,
getExtraDamage(type, level),
2.0,
level >= 0 ? defaultDigSpeedAdded[level] : null,
poisonTime[Math.max(0, level)], poisonLevel[Math.max(0, level)],
absorptionTime[Math.max(0, level)],
type == EnumDemonWillType.VENGEFUL ? movementSpeed[Math.max(0, level)] : 0);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Difficulty;
Expand Down Expand Up @@ -300,9 +301,22 @@ public void appendHoverText(ItemStack stack, Level world, List<Component> toolti
if (!stack.hasTag())
return;

// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientSword.desc"))));
tooltip.add(Component.translatable("tooltip.bloodmagic.sentientShovel.desc").withStyle(ChatFormatting.GRAY));
tooltip.add(Component.translatable("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase(Locale.ROOT)).withStyle(ChatFormatting.GRAY));
EnumDemonWillType type = getCurrentType(stack);
Player player = Minecraft.getInstance().player;
double will = player != null ? PlayerDemonWillHandler.getTotalDemonWill(type, player) : 0;
int level = getLevel(stack, will);

SentientTooltipHelper.appendSentientTooltip(
tooltip,
"tooltip.bloodmagic.sentientShovel.desc",
type,
level,
getExtraDamage(type, level),
null,
level >= 0 ? defaultDigSpeedAdded[level] : null,
poisonTime[Math.max(0, level)], poisonLevel[Math.max(0, level)],
absorptionTime[Math.max(0, level)],
type == EnumDemonWillType.VENGEFUL ? movementSpeed[Math.max(0, level)] : 0);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.Difficulty;
Expand Down Expand Up @@ -293,9 +294,22 @@ public void appendHoverText(ItemStack stack, Level world, List<Component> toolti
if (!stack.hasTag())
return;

// tooltip.addAll(Arrays.asList(TextHelper.cutLongString(TextHelper.localizeEffect("tooltip.bloodmagic.sentientSword.desc"))));
tooltip.add(Component.translatable("tooltip.bloodmagic.sentientSword.desc").withStyle(ChatFormatting.GRAY));
tooltip.add(Component.translatable("tooltip.bloodmagic.currentType." + getCurrentType(stack).name().toLowerCase(Locale.ROOT)).withStyle(ChatFormatting.GRAY));
EnumDemonWillType type = getCurrentType(stack);
Player player = Minecraft.getInstance().player;
double will = player != null ? PlayerDemonWillHandler.getTotalDemonWill(type, player) : 0;
int level = getLevel(stack, will);

SentientTooltipHelper.appendSentientTooltip(
tooltip,
"tooltip.bloodmagic.sentientSword.desc",
type,
level,
getExtraDamage(type, level),
null,
null,
poisonTime[Math.max(0, level)], poisonLevel[Math.max(0, level)],
absorptionTime[Math.max(0, level)],
type == EnumDemonWillType.VENGEFUL ? movementSpeed[Math.max(0, level)] : 0);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
package wayoftime.bloodmagic.common.item.soul;

import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import wayoftime.bloodmagic.api.compat.EnumDemonWillType;
import wayoftime.bloodmagic.will.PlayerDemonWillHandler;

import java.util.List;
import java.util.Locale;

@OnlyIn(Dist.CLIENT)
public final class SentientTooltipHelper
{
private SentientTooltipHelper() {}

public static ChatFormatting colorFor(EnumDemonWillType type)
{
if (type == null)
return ChatFormatting.GRAY;
switch (type)
{
case CORROSIVE:
return ChatFormatting.GREEN;
case DESTRUCTIVE:
return ChatFormatting.GOLD;
case VENGEFUL:
return ChatFormatting.RED;
case STEADFAST:
return ChatFormatting.LIGHT_PURPLE;
case DEFAULT:
default:
return ChatFormatting.DARK_AQUA;
}
}

public static void appendSentientTooltip(
List<Component> tooltip,
String flavourKey,
EnumDemonWillType type,
int level,
double bonusDamage,
Double aoeRadius,
Double digSpeedBonus,
int corrosiveWitherTimeTicks,
int corrosiveWitherAmplifier,
int steadfastAbsorptionTimeTicks,
double vengefulMovementSpeed)
{
tooltip.add(Component.translatable(flavourKey).withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC));

ChatFormatting color = colorFor(type);
String typeKey = "tooltip.bloodmagic.currentBaseType." + type.name().toLowerCase(Locale.ROOT);
Component typeName = Component.translatable(typeKey).withStyle(color);
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.attuned", typeName).withStyle(ChatFormatting.GRAY));

if (!Screen.hasShiftDown())
{
tooltip.add(Component.translatable("tooltip.bloodmagic.extraInfo").withStyle(ChatFormatting.DARK_GRAY));
return;
}

Player player = Minecraft.getInstance().player;
if (level >= 0 && type != EnumDemonWillType.DEFAULT && player != null)
{
double pool = PlayerDemonWillHandler.getTotalDemonWill(type, player);
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.levelPool", level + 1, formatNumber(pool)).withStyle(color));
} else
{
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.inactive").withStyle(ChatFormatting.DARK_GRAY));
return;
}

if (bonusDamage > 0)
{
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.bonusDamage", formatSigned(bonusDamage)).withStyle(ChatFormatting.GRAY));
}
if (aoeRadius != null)
{
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.aoe", formatNumber(aoeRadius)).withStyle(ChatFormatting.GRAY));
}

switch (type)
{
case CORROSIVE:
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.rider.corrosive",
formatNumber(corrosiveWitherTimeTicks / 20.0),
corrosiveWitherAmplifier + 1).withStyle(color));
break;
case STEADFAST:
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.rider.steadfast",
formatNumber(steadfastAbsorptionTimeTicks / 20.0)).withStyle(color));
break;
case VENGEFUL:
if (vengefulMovementSpeed > 0)
{
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.rider.vengeful",
formatPercent(vengefulMovementSpeed)).withStyle(color));
Comment thread
Saereth marked this conversation as resolved.
Outdated
}
break;
default:
break;
}
if (digSpeedBonus != null && digSpeedBonus > 0)
{
tooltip.add(Component.translatable("tooltip.bloodmagic.sentient.rider.digspeed", formatSigned(digSpeedBonus)).withStyle(ChatFormatting.GRAY));
}
}

private static String formatNumber(double value)
{
if (value == Math.floor(value) && !Double.isInfinite(value))
{
return String.format(Locale.ROOT, "%d", (long) value);
}
String s = String.format(Locale.ROOT, "%.2f", value);
if (s.contains("."))
{
s = s.replaceAll("0+$", "");
if (s.endsWith("."))
s = s.substring(0, s.length() - 1);
}
return s;
}

private static String formatSigned(double value)
{
String sign = value >= 0 ? "+" : "";
Comment thread
Saereth marked this conversation as resolved.
return sign + formatNumber(value);
}

private static String formatPercent(double value)
{
return formatNumber(value * 100) + "%";
}
}