Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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,136 @@
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",
formatSigned(vengefulMovementSpeed)).withStyle(color));
}
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);
}

}