port of 287fadc8ce
This commit is contained in:
yrsegal@gmail.com 2022-07-24 20:20:07 -04:00
parent f0b85dfb3a
commit 41deea129c
5 changed files with 47 additions and 24 deletions

View file

@ -10,6 +10,7 @@ import at.petrak.hexcasting.api.spell.casting.CastingContext;
import at.petrak.hexcasting.api.spell.casting.CastingHarness; import at.petrak.hexcasting.api.spell.casting.CastingHarness;
import at.petrak.hexcasting.api.spell.casting.SpellCircleContext; import at.petrak.hexcasting.api.spell.casting.SpellCircleContext;
import at.petrak.hexcasting.api.utils.ManaHelper; import at.petrak.hexcasting.api.utils.ManaHelper;
import at.petrak.hexcasting.common.items.magic.ItemCreativeUnlocker;
import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexItems;
import at.petrak.hexcasting.common.lib.HexSounds; import at.petrak.hexcasting.common.lib.HexSounds;
import at.petrak.hexcasting.xplat.IXplatAbstractions; import at.petrak.hexcasting.xplat.IXplatAbstractions;
@ -117,10 +118,14 @@ public abstract class BlockEntityAbstractImpetus extends HexBlockEntity implemen
LocalPlayer observer, ClientLevel world, LocalPlayer observer, ClientLevel world,
Direction hitFace, InteractionHand lensHand) { Direction hitFace, InteractionHand lensHand) {
if (world.getBlockEntity(pos) instanceof BlockEntityAbstractImpetus beai) { if (world.getBlockEntity(pos) instanceof BlockEntityAbstractImpetus beai) {
if (beai.getMana() < 0) {
lines.add(new Pair<>(new ItemStack(HexItems.AMETHYST_DUST), ItemCreativeUnlocker.infiniteMedia(world)));
} else {
var dustCount = (float) beai.getMana() / (float) ManaConstants.DUST_UNIT; var dustCount = (float) beai.getMana() / (float) ManaConstants.DUST_UNIT;
var dustCmp = new TranslatableComponent("hexcasting.tooltip.lens.impetus.mana", var dustCmp = new TranslatableComponent("hexcasting.tooltip.lens.impetus.mana",
String.format("%.2f", dustCount)); String.format("%.2f", dustCount));
lines.add(new Pair<>(new ItemStack(HexItems.AMETHYST_DUST), dustCmp)); lines.add(new Pair<>(new ItemStack(HexItems.AMETHYST_DUST), dustCmp));
}
var mishap = this.getLastMishap(); var mishap = this.getLastMishap();
if (mishap != null) { if (mishap != null) {
@ -530,30 +535,37 @@ public abstract class BlockEntityAbstractImpetus extends HexBlockEntity implemen
@Override @Override
public boolean canPlaceItem(int index, ItemStack stack) { public boolean canPlaceItem(int index, ItemStack stack) {
var manamount = extractMana(stack, true); var manamount = extractManaFromItem(stack, true);
return manamount > 0; return manamount > 0;
} }
@Override public int extractManaFromItem(ItemStack stack, boolean simulate) {
public void clearContent() { if (this.mana < 0)
this.mana = 0; return 0;
this.stopCasting();
this.sync();
}
public int extractMana(ItemStack stack, boolean simulate) {
return ManaHelper.extractMana(stack, remainingManaCapacity(), true, simulate); return ManaHelper.extractMana(stack, remainingManaCapacity(), true, simulate);
} }
public void insertMana(ItemStack stack) { public void insertMana(ItemStack stack) {
var manamount = extractMana(stack, false); if (getMana() >= 0 && !stack.isEmpty() && stack.getItem() == HexItems.CREATIVE_UNLOCKER) {
setInfiniteMana();
stack.shrink(1);
} else {
var manamount = extractManaFromItem(stack, false);
if (manamount > 0) { if (manamount > 0) {
this.mana += manamount; this.mana += manamount;
this.sync(); this.sync();
} }
} }
}
public void setInfiniteMana() {
this.mana = -1;
this.sync();
}
public int remainingManaCapacity() { public int remainingManaCapacity() {
if (this.mana < 0)
return 0;
return MAX_CAPACITY - this.mana; return MAX_CAPACITY - this.mana;
} }
} }

View file

@ -368,6 +368,9 @@ class CastingHarness private constructor(
val tile = this.ctx.world.getBlockEntity(this.ctx.spellCircle.impetusPos) val tile = this.ctx.world.getBlockEntity(this.ctx.spellCircle.impetusPos)
if (tile is BlockEntityAbstractImpetus) { if (tile is BlockEntityAbstractImpetus) {
val manaAvailable = tile.mana val manaAvailable = tile.mana
if (manaAvailable < 0)
return 0
val manaToTake = min(costLeft, manaAvailable) val manaToTake = min(costLeft, manaAvailable)
costLeft -= manaToTake costLeft -= manaToTake
tile.mana = manaAvailable - manaToTake tile.mana = manaAvailable - manaToTake

View file

@ -35,6 +35,18 @@ public class ItemCreativeUnlocker extends Item implements ManaHolderItem {
&& stack.getHoverName().getString().toLowerCase(Locale.ROOT).contains("debug"); && stack.getHoverName().getString().toLowerCase(Locale.ROOT).contains("debug");
} }
public static Component infiniteMedia(Level level) {
String prefix = "item.hexcasting.creative_unlocker.";
String emphasis = Language.getInstance().getOrDefault(prefix + "for_emphasis");
MutableComponent emphasized = new TextComponent("");
for (int i = 0; i < emphasis.length(); i++) {
emphasized.append(rainbow(new TextComponent("" + emphasis.charAt(i)), i, level));
}
return emphasized;
}
private static final String TAG_EXTRACTIONS = "extractions"; private static final String TAG_EXTRACTIONS = "extractions";
public ItemCreativeUnlocker(Properties properties) { public ItemCreativeUnlocker(Properties properties) {
@ -154,11 +166,7 @@ public class ItemCreativeUnlocker extends Item implements ManaHolderItem {
TooltipFlag isAdvanced) { TooltipFlag isAdvanced) {
String prefix = "item.hexcasting.creative_unlocker."; String prefix = "item.hexcasting.creative_unlocker.";
String emphasis = Language.getInstance().getOrDefault(prefix + "for_emphasis"); Component emphasized = infiniteMedia(level);
MutableComponent emphasized = new TextComponent("");
for (int i = 0; i < emphasis.length(); i++) {
emphasized.append(rainbow(new TextComponent("" + emphasis.charAt(i)), i, level));
}
MutableComponent modName = new TranslatableComponent(prefix + "mod_name").withStyle( MutableComponent modName = new TranslatableComponent(prefix + "mod_name").withStyle(
(s) -> s.withColor(HEX_COLOR)); (s) -> s.withColor(HEX_COLOR));

View file

@ -26,7 +26,7 @@ class FabricImpetusStorage(val impetus: BlockEntityAbstractImpetus) : SingleSlot
fun insertStack(stack: ItemStack, transaction: TransactionContext) { fun insertStack(stack: ItemStack, transaction: TransactionContext) {
val copied = stack.copy() val copied = stack.copy()
val extractable = impetus.extractMana(stack, false) val extractable = impetus.extractManaFromItem(stack, false)
manaToTake -= extractable manaToTake -= extractable
val taken = 64 - stack.count val taken = 64 - stack.count
itemsConsumed += taken.toLong() itemsConsumed += taken.toLong()

View file

@ -29,7 +29,7 @@ public record ForgeImpetusCapability(BlockEntityAbstractImpetus impetus) impleme
if (!simulate) { if (!simulate) {
impetus.insertMana(stack); impetus.insertMana(stack);
} else { } else {
impetus.extractMana(stack, false); // Mana goes nowhere, since nothing is actually being done impetus.extractManaFromItem(stack, false); // Mana goes nowhere, since nothing is actually being done
} }
return stack; return stack;