Replaced totem nbt target_cost with target_deaths. Added method for checking if totem is full and if totem can afford a target. Added more text in item tooltip for different config settings.

This commit is contained in:
2022-01-18 21:52:47 +00:00
parent 27a8d35c2d
commit e752c75ccd

View File

@ -10,9 +10,11 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.util.ITooltipFlag; import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.client.util.InputMappings; import net.minecraft.client.util.InputMappings;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Rarity; import net.minecraft.item.Rarity;
import net.minecraft.stats.Stats;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextComponent;
@ -32,7 +34,7 @@ public abstract class TotemItem extends Item {
private static final String TAG_TARGET_INDEX = "target_index"; private static final String TAG_TARGET_INDEX = "target_index";
private static final String TAG_TARGET_UUID = "target_uuid"; private static final String TAG_TARGET_UUID = "target_uuid";
private static final String TAG_TARGET_NAME = "target_name"; private static final String TAG_TARGET_NAME = "target_name";
private static final String TAG_TARGET_COST = "target_cost"; private static final String TAG_TARGET_DEATHS = "target_deaths";
private static final String TAG_CHARGE = "charge"; private static final String TAG_CHARGE = "charge";
public TotemItem(int durability) { public TotemItem(int durability) {
@ -71,23 +73,42 @@ public abstract class TotemItem extends Item {
if (!isTotem(stack)) { return null; } if (!isTotem(stack)) { return null; }
return stack.getOrCreateTag().getString(TAG_TARGET_NAME); return stack.getOrCreateTag().getString(TAG_TARGET_NAME);
} }
public static void setTagTargetName(ItemStack stack, String targetName) { public static void setTargetName(ItemStack stack, String targetName) {
if (!isTotem(stack)) { return; } if (!isTotem(stack)) { return; }
stack.getOrCreateTag().putString(TAG_TARGET_NAME, targetName); stack.getOrCreateTag().putString(TAG_TARGET_NAME, targetName);
} }
public static int getTargetCost(ItemStack stack) { public static int getTargetCost(ItemStack stack) {
if (!isTotem(stack)) { return -1; } if (!isTotem(stack)) { return -1; }
return !isCostDynamic(stack) ? getRawTargetCost(stack) : return !isCostDynamic(stack) ? getConfig(stack).getChargeCost() :
(int)(getRawTargetCost(stack) * getConfig(stack).getChargeCostMultiplier()); (int)(getTargetDeaths(stack) * getConfig(stack).getChargeCostMultiplier());
} }
private static int getRawTargetCost(ItemStack stack) {
public static int getTargetDeaths(ItemStack stack) {
if (!isTotem(stack)) { return -1; } if (!isTotem(stack)) { return -1; }
return stack.getOrCreateTag().getInt(TAG_TARGET_COST); return stack.getOrCreateTag().getInt(TAG_TARGET_DEATHS);
} }
public static void setTargetCost(ItemStack stack, int targetCost) { public static void setTargetDeaths(ItemStack stack, ServerPlayerEntity target) {
if (!isTotem(stack)) { return; } if (!isTotem(stack)) { return; }
stack.getOrCreateTag().putInt(TAG_TARGET_COST, targetCost); stack.getOrCreateTag().putInt(TAG_TARGET_DEATHS, target.getStats().getValue(Stats.CUSTOM.get(Stats.DEATHS)));
}
public static boolean isTotemFull(ItemStack stack) {
if (!isTotem(stack)) { return false; }
return getCharge(stack) == getMaxCharge(stack);
}
public static boolean canTotemAffordTarget(ItemStack stack) {
if (!isTotem(stack)) { return false; }
if (getCharge(stack) < getTargetCost(stack)) {
if (!isTotemFull(stack)) {
return false;
}
if (isTotemFull(stack) && canReviveMoreExpensiveTargets(stack)) {
return true;
}
}
return true;
} }
public static int getCharge(ItemStack stack) { public static int getCharge(ItemStack stack) {
@ -135,15 +156,6 @@ public abstract class TotemItem extends Item {
return getConfig(stack).getIsEnabled(); return getConfig(stack).getIsEnabled();
} }
public static void validateTargetCost(ItemStack stack, int targetDeaths) {
if (!isTotem(stack)) { return; }
if (isCostDynamic(stack) && getRawTargetCost(stack) != targetDeaths) {
setTargetCost(stack, targetDeaths);
} else if (!isCostDynamic(stack) && getRawTargetCost(stack) != getMaxCharge(stack)) {
setTargetCost(stack, getMaxCharge(stack));
}
}
@Override @Override
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
@ -163,13 +175,19 @@ public abstract class TotemItem extends Item {
tooltip.add(new StringTextComponent(TextFormatting.WHITE + "Target: " + TextFormatting.GRAY + targetName)); tooltip.add(new StringTextComponent(TextFormatting.WHITE + "Target: " + TextFormatting.GRAY + targetName));
} }
tooltip.add(new StringTextComponent("")); tooltip.add(new StringTextComponent(""));
if (charge < targetCost && !canReviveMoreExpensiveTargets(stack)) { if (!canTotemAffordTarget(stack)) {
tooltip.add(new StringTextComponent(TextFormatting.RED + "Charges: " + TextFormatting.DARK_RED + "(" + charge + "/" + targetCost + ") " + tooltip.add(new StringTextComponent(TextFormatting.RED + "Charges: " + TextFormatting.DARK_RED + "(" + charge + "/" + targetCost + ") " +
TextFormatting.RED + "[Max: " + TextFormatting.DARK_RED + maxCharge + TextFormatting.RED + "]")); TextFormatting.RED + "[Max: " + TextFormatting.DARK_RED + maxCharge + TextFormatting.RED + "]"));
} else { } else {
tooltip.add(new StringTextComponent(TextFormatting.WHITE + "Charges: " + TextFormatting.GRAY + "(" + charge + "/" + targetCost + ") " + tooltip.add(new StringTextComponent(TextFormatting.WHITE + "Charges: " + TextFormatting.GRAY + "(" + charge + "/" + targetCost + ") " +
TextFormatting.WHITE + "[Max: " + TextFormatting.GRAY + maxCharge + TextFormatting.WHITE + "]")); TextFormatting.WHITE + "[Max: " + TextFormatting.GRAY + maxCharge + TextFormatting.WHITE + "]"));
} }
if (canReviveMoreExpensiveTargets(stack)) {
tooltip.add(new StringTextComponent(TextFormatting.WHITE + "Can revive more expensive targets."));
}
if (canReviveAcrossDimensions(stack)) {
tooltip.add(new StringTextComponent(TextFormatting.WHITE + "Can revive targets across dimensions."));
}
tooltip.add(new StringTextComponent("")); tooltip.add(new StringTextComponent(""));
if (InputMappings.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_SHIFT)) { if (InputMappings.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_SHIFT)) {
tooltip.add(new StringTextComponent(TextFormatting.GRAY + "Showing advanced tooltip.")); tooltip.add(new StringTextComponent(TextFormatting.GRAY + "Showing advanced tooltip."));