rename lots of things

This commit is contained in:
gamma-delta 2022-06-13 16:45:22 -05:00
parent fb246ef883
commit d0f43ff0d9
61 changed files with 695 additions and 545 deletions

View file

@ -6,7 +6,7 @@ import net.minecraft.world.phys.Vec3;
import java.util.UUID;
public interface Colorizer {
public interface ADColorizer {
int color(UUID owner, float time, Vec3 position);
static int morphBetweenColors(int[] colors, Vec3 gradientDir, float time, Vec3 position) {

View file

@ -1,21 +1,21 @@
package at.petrak.hexcasting.api.addldata;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.iota.Iota;
import net.minecraft.server.level.ServerLevel;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public interface HexHolder {
public interface ADHexHolder {
boolean canDrawManaFromInventory();
boolean hasHex();
@Nullable
List<LegacySpellDatum<?>> getHex(ServerLevel level);
List<Iota> getHex(ServerLevel level);
void writeHex(List<LegacySpellDatum<?>> patterns, int mana);
void writeHex(List<Iota> patterns, int mana);
void clearHex();
}

View file

@ -0,0 +1,32 @@
package at.petrak.hexcasting.api.addldata;
import at.petrak.hexcasting.api.spell.iota.Iota;
import at.petrak.hexcasting.common.lib.HexIotaTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
import org.jetbrains.annotations.Nullable;
public interface ADIotaHolder {
@Nullable
CompoundTag readIotaTag();
@Nullable
default Iota readIota(ServerLevel world) {
var tag = readIotaTag();
if (tag != null) {
return HexIotaTypes.deserialize(tag, world);
} else {
return null;
}
}
@Nullable
default Iota emptyIota() {
return null;
}
/**
* @return if the writing succeeded/would succeed
*/
boolean writeIota(@Nullable Iota iota, boolean simulate);
}

View file

@ -0,0 +1,42 @@
package at.petrak.hexcasting.api.addldata;
public interface ADMediaHolder {
int getMedia();
int getMaxMedia();
void setMedia(int media);
boolean canRecharge();
boolean canProvide();
/**
* When scanning an inventory for media-containing items, the items with the highest priority will
* get their media consumed first.
*/
int getConsumptionPriority();
boolean canConstructBattery();
default int withdrawMedia(int cost, boolean simulate) {
if (!canProvide()) {
return 0;
}
var manaHere = getMedia();
if (cost < 0) {
cost = manaHere;
}
if (!simulate) {
var manaLeft = manaHere - cost;
setMedia(manaLeft);
}
return Math.min(cost, manaHere);
}
public int CHARGED_AMETHYST_PRIORITY = 1000;
public int AMETHYST_SHARD_PRIORITY = 2000;
public int AMETHYST_DUST_PRIORITY = 3000;
public int BATTERY_PRIORITY = 4000;
}

View file

@ -1,28 +0,0 @@
package at.petrak.hexcasting.api.addldata;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel;
import org.jetbrains.annotations.Nullable;
public interface DataHolder {
@Nullable
CompoundTag readRawDatum();
@Nullable
default LegacySpellDatum<?> readDatum(ServerLevel world) {
var tag = readRawDatum();
if (tag != null) {
return LegacySpellDatum.fromNBT(tag, world);
} else {
return null;
}
}
@Nullable
default LegacySpellDatum<?> emptyDatum() {
return null;
}
boolean writeDatum(@Nullable LegacySpellDatum<?> datum, boolean simulate);
}

View file

@ -1,33 +0,0 @@
package at.petrak.hexcasting.api.addldata;
public interface ManaHolder {
int getMana();
int getMaxMana();
void setMana(int mana);
boolean canRecharge();
boolean canProvide();
int getConsumptionPriority();
boolean canConstructBattery();
default int withdrawMana(int cost, boolean simulate) {
if (!canProvide()) {
return 0;
}
var manaHere = getMana();
if (cost < 0) {
cost = manaHere;
}
if (!simulate) {
var manaLeft = manaHere - cost;
setMana(manaLeft);
}
return Math.min(cost, manaHere);
}
}

View file

@ -0,0 +1,10 @@
/**
* An "Additional Data," or AD, is what I am calling the abstraction over capabilities on Forge and
* cardinal components on Fabric.
* <p>
* An {@code ADFooBar} in this package will be implemented by a {@code CCFooBar} on Fabric.
* On Forge, there are a set of private records that implement them.
* <p>
* The point is, this provides an interface for interacting with however whatever platform sticks extra info on stuff.
*/
package at.petrak.hexcasting.api.addldata;

View file

@ -5,6 +5,12 @@ import net.minecraft.world.phys.Vec3;
import java.util.UUID;
/**
* Items which can be used as a colorizer can implement this interface.
* <p>
* On both the Forge and Fabric sides, the registry will be scanned for all items which implement this interface,
* and the appropriate cap/CC will be attached.
*/
public interface ColorizerItem {
int color(ItemStack stack, UUID owner, float time, Vec3 position);
}

View file

@ -1,63 +0,0 @@
package at.petrak.hexcasting.api.item;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.utils.NBTHelper;
import net.minecraft.ChatFormatting;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public interface DataHolderItem {
String TAG_OVERRIDE_VISUALLY = "VisualOverride";
@Nullable CompoundTag readDatumTag(ItemStack stack);
@Nullable
default LegacySpellDatum<?> readDatum(ItemStack stack, ServerLevel world) {
if (!(stack.getItem() instanceof DataHolderItem dh)) {
// this should be checked via mishap beforehand
throw new IllegalArgumentException("stack's item must be an ItemDataholder but was " + stack.getItem());
}
var tag = dh.readDatumTag(stack);
if (tag != null) {
return LegacySpellDatum.fromNBT(tag, world);
} else {
return null;
}
}
@Nullable
default LegacySpellDatum<?> emptyDatum(ItemStack stack) {
return null;
}
boolean canWrite(ItemStack stack, @Nullable LegacySpellDatum<?> datum);
void writeDatum(ItemStack stack, @Nullable LegacySpellDatum<?> datum);
static void appendHoverText(DataHolderItem self, ItemStack pStack, List<Component> pTooltipComponents,
TooltipFlag pIsAdvanced) {
var datumTag = self.readDatumTag(pStack);
if (datumTag != null) {
var component = LegacySpellDatum.displayFromNBT(datumTag);
pTooltipComponents.add(new TranslatableComponent("hexcasting.spelldata.onitem", component));
if (pIsAdvanced.isAdvanced()) {
pTooltipComponents.add(new TextComponent("").append(NbtUtils.toPrettyComponent(datumTag)));
}
} else if (NBTHelper.hasString(pStack, DataHolderItem.TAG_OVERRIDE_VISUALLY)) {
pTooltipComponents.add(new TranslatableComponent("hexcasting.spelldata.onitem",
new TranslatableComponent("hexcasting.spelldata.anything").withStyle(ChatFormatting.LIGHT_PURPLE)));
}
}
}

View file

@ -1,22 +1,28 @@
package at.petrak.hexcasting.api.item;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.iota.Iota;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public interface HexHolderItem extends ManaHolderItem {
/**
* Items which can cast a packaged Hex can implement this interface.
* <p>
* On both the Forge and Fabric sides, the registry will be scanned for all items which implement this interface,
* and the appropriate cap/CC will be attached.
*/
public interface HexHolderItem extends MediaHolderItem {
boolean canDrawManaFromInventory(ItemStack stack);
boolean hasHex(ItemStack stack);
@Nullable
List<LegacySpellDatum<?>> getHex(ItemStack stack, ServerLevel level);
List<Iota> getHex(ItemStack stack, ServerLevel level);
void writeHex(ItemStack stack, List<LegacySpellDatum<?>> patterns, int mana);
void writeHex(ItemStack stack, List<Iota> program, int mana);
void clearHex(ItemStack stack);
}

View file

@ -0,0 +1,69 @@
package at.petrak.hexcasting.api.item;
import at.petrak.hexcasting.api.spell.iota.Iota;
import at.petrak.hexcasting.api.utils.NBTHelper;
import at.petrak.hexcasting.common.lib.HexIotaTypes;
import net.minecraft.ChatFormatting;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* Items that store an iota to their tag can implement this interface.
* <p>
* On both the Forge and Fabric sides, the registry will be scanned for all items which implement this interface,
* and the appropriate cap/CC will be attached.
*/
public interface IotaHolderItem {
String TAG_OVERRIDE_VISUALLY = "VisualOverride";
@Nullable CompoundTag readIotaTag(ItemStack stack);
@Nullable
default Iota readIota(ItemStack stack, ServerLevel world) {
if (!(stack.getItem() instanceof IotaHolderItem dh)) {
// this should be checked via mishap beforehand
throw new IllegalArgumentException("stack's item must be an IotaHolderItem but was " + stack.getItem());
}
var tag = dh.readIotaTag(stack);
if (tag != null) {
return HexIotaTypes.deserialize(tag, world);
} else {
return null;
}
}
@Nullable
default Iota emptyIota(ItemStack stack) {
return null;
}
boolean canWrite(ItemStack stack, @Nullable Iota iota);
void writeDatum(ItemStack stack, @Nullable Iota iota);
static void appendHoverText(IotaHolderItem self, ItemStack stack, List<Component> components,
TooltipFlag flag) {
var datumTag = self.readIotaTag(stack);
if (datumTag != null) {
var cmp = HexIotaTypes.getDisplay(datumTag);
components.add(new TranslatableComponent("hexcasting.spelldata.onitem", cmp));
if (flag.isAdvanced()) {
components.add(new TextComponent("").append(NbtUtils.toPrettyComponent(datumTag)));
}
} else if (NBTHelper.hasString(stack, IotaHolderItem.TAG_OVERRIDE_VISUALLY)) {
components.add(new TranslatableComponent("hexcasting.spelldata.onitem",
new TranslatableComponent("hexcasting.spelldata.anything").withStyle(ChatFormatting.LIGHT_PURPLE)));
}
}
}

View file

@ -1,35 +0,0 @@
package at.petrak.hexcasting.api.item;
import net.minecraft.world.item.ItemStack;
public interface ManaHolderItem {
int getMana(ItemStack stack);
int getMaxMana(ItemStack stack);
void setMana(ItemStack stack, int mana);
boolean manaProvider(ItemStack stack);
boolean canRecharge(ItemStack stack);
default float getManaFullness(ItemStack stack) {
int max = getMaxMana(stack);
if (max == 0) {
return 0;
}
return (float) getMana(stack) / (float) max;
}
default int withdrawMana(ItemStack stack, int cost, boolean simulate) {
var manaHere = getMana(stack);
if (cost < 0) {
cost = manaHere;
}
if (!simulate) {
var manaLeft = manaHere - cost;
setMana(stack, manaLeft);
}
return Math.min(cost, manaHere);
}
}

View file

@ -0,0 +1,41 @@
package at.petrak.hexcasting.api.item;
import net.minecraft.world.item.ItemStack;
/**
* Items which can store Media can implement this interface.
* <p>
* On both the Forge and Fabric sides, the registry will be scanned for all items which implement this interface,
* and the appropriate cap/CC will be attached.
*/
public interface MediaHolderItem {
int getMedia(ItemStack stack);
int getMaxMedia(ItemStack stack);
void setMedia(ItemStack stack, int media);
boolean canProvideMedia(ItemStack stack);
boolean canRecharge(ItemStack stack);
default float getManaFullness(ItemStack stack) {
int max = getMaxMedia(stack);
if (max == 0) {
return 0;
}
return (float) getMedia(stack) / (float) max;
}
default int withdrawMana(ItemStack stack, int cost, boolean simulate) {
var manaHere = getMedia(stack);
if (cost < 0) {
cost = manaHere;
}
if (!simulate) {
var manaLeft = manaHere - cost;
setMedia(stack, manaLeft);
}
return Math.min(cost, manaHere);
}
}

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.api.misc;
import at.petrak.hexcasting.api.addldata.Colorizer;
import at.petrak.hexcasting.api.addldata.ADColorizer;
import at.petrak.hexcasting.common.items.colorizer.ItemPrideColorizer;
import at.petrak.hexcasting.common.lib.HexItems;
import at.petrak.hexcasting.xplat.IXplatAbstractions;
@ -31,7 +31,8 @@ public record FrozenColorizer(ItemStack item, UUID owner) {
0xFF200000, 0xFF202000, 0xFF002000, 0xFF002020, 0xFF000020, 0xFF200020
};
private static final Map<String, Supplier<Item>> OLD_PRIDE_COLORIZERS = Arrays.stream(ItemPrideColorizer.Type.values())
private static final Map<String, Supplier<Item>> OLD_PRIDE_COLORIZERS = Arrays.stream(
ItemPrideColorizer.Type.values())
.collect(Collectors.<ItemPrideColorizer.Type, String, Supplier<Item>>toMap(
(type) -> modLoc("pride_colorizer_" + type.ordinal()).toString(),
(type) -> (() -> HexItems.PRIDE_COLORIZERS.get(type))));
@ -85,7 +86,7 @@ public record FrozenColorizer(ItemStack item, UUID owner) {
double luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 0xFF; // Standard relative luminance calculation
if (luminance < 0.05) {
int rawMod = Colorizer.morphBetweenColors(MINIMUM_LUMINANCE_COLOR_WHEEL, new Vec3(0.1, 0.1, 0.1),
int rawMod = ADColorizer.morphBetweenColors(MINIMUM_LUMINANCE_COLOR_WHEEL, new Vec3(0.1, 0.1, 0.1),
time / 20 / 20, position);
r += FastColor.ARGB32.red(rawMod);

View file

@ -375,9 +375,9 @@ class CastingHarness private constructor(
val casterHexHolder = IXplatAbstractions.INSTANCE.findHexHolder(casterStack)
val hexHolderDrawsFromInventory = if (casterHexHolder != null) {
if (casterManaHolder != null) {
val manaAvailable = casterManaHolder.mana
val manaAvailable = casterManaHolder.media
val manaToTake = min(costLeft, manaAvailable)
if (!fake) casterManaHolder.mana = manaAvailable - manaToTake
if (!fake) casterManaHolder.media = manaAvailable - manaToTake
costLeft -= manaToTake
}
casterHexHolder.canDrawManaFromInventory()

View file

@ -1,10 +1,12 @@
package at.petrak.hexcasting.api.spell.iota;
import at.petrak.hexcasting.api.utils.HexUtils;
import at.petrak.hexcasting.common.lib.HexIotaTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import org.jetbrains.annotations.NotNull;
@ -30,7 +32,7 @@ public class EntityIota extends Iota {
public @NotNull Tag serialize() {
var out = new CompoundTag();
out.putUUID("uuid", this.getEntity().getUUID());
out.putString("name", Component.Serializer.toJson(this.getEntity().getDisplayName()));
out.putString("name", Component.Serializer.toJson(this.getEntity().getName()));
return out;
}
@ -38,7 +40,12 @@ public class EntityIota extends Iota {
@Nullable
@Override
public EntityIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException {
var uuid = NbtUtils.loadUUID(tag);
var ctag = HexUtils.downcast(tag, CompoundTag.TYPE);
Tag uuidTag = ctag.get("uuid");
if (uuidTag == null) {
return null;
}
var uuid = NbtUtils.loadUUID(uuidTag);
var entity = world.getEntity(uuid);
if (entity == null) {
return null;
@ -48,7 +55,14 @@ public class EntityIota extends Iota {
@Override
public Component display(Tag tag) {
return null;
if (!(tag instanceof CompoundTag ctag)) {
return new TranslatableComponent("hexcasting.spelldata.entity.whoknows");
}
if (!ctag.contains("name", Tag.TAG_STRING)) {
return new TranslatableComponent("hexcasting.spelldata.entity.whoknows");
}
var nameJson = ctag.getString("name");
return Component.Serializer.fromJsonLenient(nameJson);
}
@Override

View file

@ -30,6 +30,11 @@ public abstract class Iota {
*/
abstract public boolean toleratesOther(Iota that);
/**
* Serialize this under the {@code data} tag.
* <p>
* You probably don't want to call this directly; use {@link HexIotaTypes#serialize}.
*/
abstract public @NotNull Tag serialize();
/**

View file

@ -1,4 +1,5 @@
@file:JvmName("ManaHelper")
package at.petrak.hexcasting.api.utils
import at.petrak.hexcasting.xplat.IXplatAbstractions
@ -10,7 +11,7 @@ fun isManaItem(stack: ItemStack): Boolean {
val manaHolder = IXplatAbstractions.INSTANCE.findManaHolder(stack) ?: return false
if (!manaHolder.canProvide())
return false
return manaHolder.withdrawMana(-1, true) > 0
return manaHolder.withdrawMedia(-1, true) > 0
}
/**
@ -33,7 +34,7 @@ fun extractMana(
if (drainForBatteries && !manaHolder.canConstructBattery())
return 0
return manaHolder.withdrawMana(cost, simulate)
return manaHolder.withdrawMedia(cost, simulate)
}
/**
@ -46,7 +47,7 @@ fun compareManaItem(astack: ItemStack, bstack: ItemStack): Int {
return if (astack.item != bstack.item) {
(aMana?.consumptionPriority ?: 0) - (bMana?.consumptionPriority ?: 0)
} else if (aMana != null && bMana != null) {
aMana.mana - bMana.mana
aMana.media - bMana.media
} else {
astack.count - bstack.count
}

View file

@ -3,8 +3,8 @@ package at.petrak.hexcasting.client;
import at.petrak.hexcasting.api.block.circle.BlockAbstractImpetus;
import at.petrak.hexcasting.api.block.circle.BlockEntityAbstractImpetus;
import at.petrak.hexcasting.api.client.ScryingLensOverlayRegistry;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.ManaHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.item.MediaHolderItem;
import at.petrak.hexcasting.api.misc.ManaConstants;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.Widget;
@ -20,7 +20,7 @@ import at.petrak.hexcasting.common.items.ItemFocus;
import at.petrak.hexcasting.common.items.ItemScroll;
import at.petrak.hexcasting.common.items.ItemSlate;
import at.petrak.hexcasting.common.items.ItemWand;
import at.petrak.hexcasting.common.items.magic.ItemManaBattery;
import at.petrak.hexcasting.common.items.magic.ItemMediaBattery;
import at.petrak.hexcasting.common.items.magic.ItemPackagedHex;
import at.petrak.hexcasting.common.lib.HexBlockEntities;
import at.petrak.hexcasting.common.lib.HexBlocks;
@ -61,15 +61,15 @@ public class RegisterClientStuff {
registerPackagedSpellOverrides(HexItems.ARTIFACT);
var x = IClientXplatAbstractions.INSTANCE;
x.registerItemProperty(HexItems.BATTERY, ItemManaBattery.MANA_PREDICATE,
x.registerItemProperty(HexItems.BATTERY, ItemMediaBattery.MANA_PREDICATE,
(stack, level, holder, holderID) -> {
var item = (ManaHolderItem) stack.getItem();
var item = (MediaHolderItem) stack.getItem();
return item.getManaFullness(stack);
});
x.registerItemProperty(HexItems.BATTERY, ItemManaBattery.MAX_MANA_PREDICATE,
x.registerItemProperty(HexItems.BATTERY, ItemMediaBattery.MAX_MANA_PREDICATE,
(stack, level, holder, holderID) -> {
var item = (ItemManaBattery) stack.getItem();
var max = item.getMaxMana(stack);
var item = (ItemMediaBattery) stack.getItem();
var max = item.getMaxMedia(stack);
return (float) Math.sqrt((float) max / ManaConstants.CRYSTAL_UNIT / 10);
});
@ -253,11 +253,11 @@ public class RegisterClientStuff {
(stack, level, holder, holderID) -> NBTHelper.hasString(stack, ItemScroll.TAG_OP_ID) ? 1f : 0f);
}
private static void registerDataHolderOverrides(DataHolderItem item) {
private static void registerDataHolderOverrides(IotaHolderItem item) {
IClientXplatAbstractions.INSTANCE.registerItemProperty((Item) item, ItemFocus.DATATYPE_PRED,
(stack, level, holder, holderID) -> {
var datum = item.readDatumTag(stack);
String override = NBTHelper.getString(stack, DataHolderItem.TAG_OVERRIDE_VISUALLY);
var datum = item.readIotaTag(stack);
String override = NBTHelper.getString(stack, IotaHolderItem.TAG_OVERRIDE_VISUALLY);
String typename = null;
if (override != null) {
typename = override;

View file

@ -52,7 +52,7 @@ public class BlockStoredPlayerImpetus extends BlockAbstractImpetus {
var datumContainer = IXplatAbstractions.INSTANCE.findDataHolder(usedStack);
if (datumContainer != null) {
if (pLevel instanceof ServerLevel level) {
var stored = datumContainer.readDatum(level);
var stored = datumContainer.readIota(level);
if (stored != null && stored.getType() == DatumType.ENTITY) {
var entity = (Entity) stored.getPayload();
if (entity instanceof Player player) {

View file

@ -12,14 +12,14 @@ object OpRead : ConstManaOperator {
override fun execute(args: List<LegacySpellDatum<*>>, ctx: CastingContext): List<LegacySpellDatum<*>> {
val (handStack, hand) = ctx.getHeldItemToOperateOn {
val dataHolder = IXplatAbstractions.INSTANCE.findDataHolder(it)
dataHolder != null && (dataHolder.readDatum(ctx.world) != null || dataHolder.emptyDatum() != null)
dataHolder != null && (dataHolder.readIota(ctx.world) != null || dataHolder.emptyIota() != null)
}
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack)
?: throw MishapBadOffhandItem.of(handStack, hand, "iota.read")
val datum = datumHolder.readDatum(ctx.world)
?: datumHolder.emptyDatum()
val datum = datumHolder.readIota(ctx.world)
?: datumHolder.emptyIota()
?: throw MishapBadOffhandItem.of(handStack, hand, "iota.read")
return listOf(datum)

View file

@ -17,8 +17,8 @@ object OpReadable : ConstManaOperator {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack)
?: return false.asSpellResult
datumHolder.readDatum(ctx.world)
?: datumHolder.emptyDatum()
datumHolder.readIota(ctx.world)
?: datumHolder.emptyIota()
?: return false.asSpellResult
return true.asSpellResult

View file

@ -1,9 +1,9 @@
package at.petrak.hexcasting.common.casting.operators
import at.petrak.hexcasting.api.spell.ConstManaOperator
import at.petrak.hexcasting.api.spell.getChecked
import at.petrak.hexcasting.api.spell.LegacySpellDatum
import at.petrak.hexcasting.api.spell.casting.CastingContext
import at.petrak.hexcasting.api.spell.getChecked
import at.petrak.hexcasting.api.spell.mishaps.MishapBadItem
import at.petrak.hexcasting.xplat.IXplatAbstractions
import net.minecraft.world.entity.item.ItemEntity
@ -23,8 +23,8 @@ object OpTheCoolerRead : ConstManaOperator {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(stack)
?: throw MishapBadItem.of(target, "iota.read")
val datum = datumHolder.readDatum(ctx.world)
?: datumHolder.emptyDatum()
val datum = datumHolder.readIota(ctx.world)
?: datumHolder.emptyIota()
?: throw MishapBadItem.of(target, "iota.read")
return listOf(datum)
}

View file

@ -22,7 +22,7 @@ object OpTheCoolerReadable : ConstManaOperator {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(stack)
?: return false.asSpellResult
if (datumHolder.readDatum(ctx.world) == null && datumHolder.emptyDatum() == null)
if (datumHolder.readIota(ctx.world) == null && datumHolder.emptyIota() == null)
return false.asSpellResult
return true.asSpellResult

View file

@ -16,12 +16,12 @@ object OpWritable : ConstManaOperator {
val (handStack) = ctx.getHeldItemToOperateOn {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(it)
datumHolder != null && datumHolder.writeDatum(datum, true)
datumHolder != null && datumHolder.writeIota(datum, true)
}
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack) ?: return false.asSpellResult
if (!datumHolder.writeDatum(datum, true))
if (!datumHolder.writeIota(datum, true))
return false.asSpellResult
val trueName = MishapOthersName.getTrueNameFromDatum(datum, ctx.caster)

View file

@ -1,8 +1,8 @@
package at.petrak.hexcasting.common.casting.operators
import at.petrak.hexcasting.api.spell.LegacySpellDatum
import at.petrak.hexcasting.api.spell.ParticleSpray
import at.petrak.hexcasting.api.spell.RenderedSpell
import at.petrak.hexcasting.api.spell.LegacySpellDatum
import at.petrak.hexcasting.api.spell.SpellOperator
import at.petrak.hexcasting.api.spell.casting.CastingContext
import at.petrak.hexcasting.api.spell.mishaps.MishapBadOffhandItem
@ -21,13 +21,13 @@ object OpWrite : SpellOperator {
val (handStack, hand) = ctx.getHeldItemToOperateOn {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(it)
datumHolder != null && datumHolder.writeDatum(datum, true)
datumHolder != null && datumHolder.writeIota(datum, true)
}
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack)
?: throw MishapBadOffhandItem.of(handStack, hand, "iota.write")
if (!datumHolder.writeDatum(datum, true))
if (!datumHolder.writeIota(datum, true))
throw MishapBadOffhandItem.of(handStack, hand, "iota.readonly", datum.display())
val trueName = MishapOthersName.getTrueNameFromDatum(datum, ctx.caster)
@ -46,11 +46,11 @@ object OpWrite : SpellOperator {
val (handStack) = ctx.getHeldItemToOperateOn {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(it)
datumHolder != null && datumHolder.writeDatum(datum, true)
datumHolder != null && datumHolder.writeIota(datum, true)
}
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack)
datumHolder?.writeDatum(datum, false)
datumHolder?.writeIota(datum, false)
}
}
}

View file

@ -1,9 +1,9 @@
package at.petrak.hexcasting.common.casting.operators.spells
import at.petrak.hexcasting.api.misc.ManaConstants
import at.petrak.hexcasting.api.spell.LegacySpellDatum
import at.petrak.hexcasting.api.spell.ParticleSpray
import at.petrak.hexcasting.api.spell.RenderedSpell
import at.petrak.hexcasting.api.spell.LegacySpellDatum
import at.petrak.hexcasting.api.spell.SpellOperator
import at.petrak.hexcasting.api.spell.casting.CastingContext
import at.petrak.hexcasting.api.spell.mishaps.MishapBadOffhandItem
@ -21,13 +21,13 @@ class OpErase : SpellOperator {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(it)
(hexHolder?.hasHex() == true) ||
(datumHolder?.writeDatum(null, true) == true)
(datumHolder?.writeIota(null, true) == true)
}
val hexHolder = IXplatAbstractions.INSTANCE.findHexHolder(handStack)
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack)
if ((hexHolder?.hasHex() != true) &&
(datumHolder?.writeDatum(null, true) != true)
(datumHolder?.writeIota(null, true) != true)
) {
throw MishapBadOffhandItem.of(handStack, hand, "eraseable")
}
@ -45,7 +45,7 @@ class OpErase : SpellOperator {
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(it)
(hexHolder?.hasHex() == true) ||
(datumHolder?.writeDatum(null, true) == true)
(datumHolder?.writeIota(null, true) == true)
}
val hexHolder = IXplatAbstractions.INSTANCE.findHexHolder(handStack)
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack)
@ -53,8 +53,8 @@ class OpErase : SpellOperator {
if (hexHolder?.hasHex() == true)
hexHolder.clearHex()
if (datumHolder != null && datumHolder.writeDatum(null, true))
datumHolder.writeDatum(null, false)
if (datumHolder != null && datumHolder.writeIota(null, true))
datumHolder.writeIota(null, false)
}
}
}

View file

@ -2,17 +2,13 @@ package at.petrak.hexcasting.common.casting.operators.spells
import at.petrak.hexcasting.api.misc.ManaConstants
import at.petrak.hexcasting.api.mod.HexItemTags
import at.petrak.hexcasting.api.spell.getChecked
import at.petrak.hexcasting.api.spell.ParticleSpray
import at.petrak.hexcasting.api.spell.RenderedSpell
import at.petrak.hexcasting.api.spell.LegacySpellDatum
import at.petrak.hexcasting.api.spell.SpellOperator
import at.petrak.hexcasting.api.spell.*
import at.petrak.hexcasting.api.spell.casting.CastingContext
import at.petrak.hexcasting.api.spell.mishaps.MishapBadItem
import at.petrak.hexcasting.api.spell.mishaps.MishapBadOffhandItem
import at.petrak.hexcasting.api.utils.extractMana
import at.petrak.hexcasting.api.utils.isManaItem
import at.petrak.hexcasting.common.items.magic.ItemManaHolder
import at.petrak.hexcasting.common.items.magic.ItemMediaHolder
import at.petrak.hexcasting.common.lib.HexItems
import net.minecraft.world.entity.item.ItemEntity
import net.minecraft.world.item.ItemStack
@ -59,8 +55,10 @@ object OpMakeBattery : SpellOperator {
)
}
return Triple(Spell(entity),
ManaConstants.CRYSTAL_UNIT, listOf(ParticleSpray.burst(entity.position(), 0.5)))
return Triple(
Spell(entity),
ManaConstants.CRYSTAL_UNIT, listOf(ParticleSpray.burst(entity.position(), 0.5))
)
}
private data class Spell(val itemEntity: ItemEntity) : RenderedSpell {
@ -72,7 +70,7 @@ object OpMakeBattery : SpellOperator {
if (manaAmt > 0) {
ctx.caster.setItemInHand(
hand,
ItemManaHolder.withMana(ItemStack(HexItems.BATTERY), manaAmt, manaAmt)
ItemMediaHolder.withMana(ItemStack(HexItems.BATTERY), manaAmt, manaAmt)
)
}

View file

@ -18,7 +18,7 @@ object OpRecharge : SpellOperator {
): Triple<RenderedSpell, Int, List<ParticleSpray>>? {
val (handStack, hand) = ctx.getHeldItemToOperateOn {
val mana = IXplatAbstractions.INSTANCE.findManaHolder(it)
mana != null && mana.canRecharge() && mana.mana /* doo doo da do doo */ < mana.maxMana
mana != null && mana.canRecharge() && mana.media /* doo doo da do doo */ < mana.maxMedia
}
val mana = IXplatAbstractions.INSTANCE.findManaHolder(handStack)
@ -40,7 +40,7 @@ object OpRecharge : SpellOperator {
)
}
if (mana.mana >= mana.maxMana)
if (mana.media >= mana.maxMedia)
return null
return Triple(
@ -54,19 +54,19 @@ object OpRecharge : SpellOperator {
override fun cast(ctx: CastingContext) {
val (handStack) = ctx.getHeldItemToOperateOn {
val mana = IXplatAbstractions.INSTANCE.findManaHolder(it)
mana != null && mana.canRecharge() && mana.mana < mana.maxMana
mana != null && mana.canRecharge() && mana.media < mana.maxMedia
}
val mana = IXplatAbstractions.INSTANCE.findManaHolder(handStack)
if (mana != null && itemEntity.isAlive) {
val entityStack = itemEntity.item.copy()
val maxMana = mana.maxMana
val existingMana = mana.mana
val maxMana = mana.maxMedia
val existingMana = mana.media
val manaAmt = extractMana(entityStack, maxMana - existingMana)
mana.mana = manaAmt + existingMana
mana.media = manaAmt + existingMana
itemEntity.item = entityStack
if (entityStack.isEmpty)

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.utils.NBTHelper;
import at.petrak.hexcasting.common.lib.HexSounds;
@ -18,7 +18,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
public class ItemAbacus extends Item implements DataHolderItem {
public class ItemAbacus extends Item implements IotaHolderItem {
public static final String TAG_VALUE = "value";
public ItemAbacus(Properties pProperties) {
@ -26,7 +26,7 @@ public class ItemAbacus extends Item implements DataHolderItem {
}
@Override
public @Nullable CompoundTag readDatumTag(ItemStack stack) {
public @Nullable CompoundTag readIotaTag(ItemStack stack) {
var datum = LegacySpellDatum.make(NBTHelper.getDouble(stack, TAG_VALUE));
return datum.serializeToNBT();
}
@ -65,6 +65,6 @@ public class ItemAbacus extends Item implements DataHolderItem {
@Override
public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Component> pTooltipComponents,
TooltipFlag pIsAdvanced) {
DataHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced);
IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced);
}
}

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.Widget;
import at.petrak.hexcasting.api.utils.NBTHelper;
@ -17,7 +17,7 @@ import java.util.List;
import static at.petrak.hexcasting.api.HexAPI.modLoc;
public class ItemFocus extends Item implements DataHolderItem {
public class ItemFocus extends Item implements IotaHolderItem {
public static final ResourceLocation DATATYPE_PRED = modLoc("datatype");
public static final ResourceLocation SEALED_PRED = modLoc("sealed");
@ -29,7 +29,7 @@ public class ItemFocus extends Item implements DataHolderItem {
}
@Override
public @Nullable CompoundTag readDatumTag(ItemStack stack) {
public @Nullable CompoundTag readIotaTag(ItemStack stack) {
return NBTHelper.getCompound(stack, TAG_DATA);
}
@ -39,7 +39,7 @@ public class ItemFocus extends Item implements DataHolderItem {
}
@Override
public @Nullable LegacySpellDatum<?> emptyDatum(ItemStack stack) {
public @Nullable LegacySpellDatum<?> emptyIota(ItemStack stack) {
return LegacySpellDatum.make(Widget.NULL);
}
@ -61,6 +61,6 @@ public class ItemFocus extends Item implements DataHolderItem {
@Override
public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Component> pTooltipComponents,
TooltipFlag pIsAdvanced) {
DataHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced);
IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced);
}
}

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.spell.DatumType;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.math.HexPattern;
@ -36,7 +36,7 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc;
* <br>
* TAG_OP_ID: invalid
*/
public class ItemScroll extends Item implements DataHolderItem {
public class ItemScroll extends Item implements IotaHolderItem {
public static final String TAG_OP_ID = "op_id";
public static final String TAG_PATTERN = "pattern";
public static final ResourceLocation ANCIENT_PREDICATE = modLoc("ancient");
@ -49,7 +49,7 @@ public class ItemScroll extends Item implements DataHolderItem {
}
@Override
public @Nullable CompoundTag readDatumTag(ItemStack stack) {
public @Nullable CompoundTag readIotaTag(ItemStack stack) {
CompoundTag pattern = NBTHelper.getCompound(stack, TAG_PATTERN);
if (pattern == null) {
return null;

View file

@ -2,12 +2,12 @@ package at.petrak.hexcasting.common.items;
import at.petrak.hexcasting.annotations.SoftImplement;
import at.petrak.hexcasting.api.HexAPI;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.spell.DatumType;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.math.HexPattern;
import at.petrak.hexcasting.client.gui.PatternTooltipGreeble;
import at.petrak.hexcasting.api.utils.NBTHelper;
import at.petrak.hexcasting.client.gui.PatternTooltipGreeble;
import at.petrak.hexcasting.common.blocks.circles.BlockEntitySlate;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
@ -27,7 +27,7 @@ import java.util.Optional;
import static at.petrak.hexcasting.api.HexAPI.modLoc;
public class ItemSlate extends BlockItem implements DataHolderItem {
public class ItemSlate extends BlockItem implements IotaHolderItem {
public static final ResourceLocation WRITTEN_PRED = modLoc("written");
public ItemSlate(Block pBlock, Properties pProperties) {
@ -51,19 +51,21 @@ public class ItemSlate extends BlockItem implements DataHolderItem {
@SoftImplement("IForgeItem")
public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) {
if (!hasPattern(stack))
if (!hasPattern(stack)) {
NBTHelper.remove(stack, "BlockEntityTag");
}
return false;
}
@Override
public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pSlotId, boolean pIsSelected) {
if (!hasPattern(pStack))
if (!hasPattern(pStack)) {
NBTHelper.remove(pStack, "BlockEntityTag");
}
}
@Override
public @Nullable CompoundTag readDatumTag(ItemStack stack) {
public @Nullable CompoundTag readIotaTag(ItemStack stack) {
var bet = NBTHelper.getCompound(stack, "BlockEntityTag");
if (bet == null || !bet.contains(BlockEntitySlate.TAG_PATTERN, Tag.TAG_COMPOUND)) {
@ -90,8 +92,9 @@ public class ItemSlate extends BlockItem implements DataHolderItem {
if (datum == null) {
var beTag = NBTHelper.getOrCreateCompound(stack, "BlockEntityTag");
beTag.remove(BlockEntitySlate.TAG_PATTERN);
if (beTag.isEmpty())
if (beTag.isEmpty()) {
NBTHelper.remove(stack, "BlockEntityTag");
}
} else if (datum.getPayload() instanceof HexPattern pat) {
var beTag = NBTHelper.getOrCreateCompound(stack, "BlockEntityTag");
beTag.put(BlockEntitySlate.TAG_PATTERN, pat.serializeToNBT());

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.Widget;
import at.petrak.hexcasting.api.utils.NBTHelper;
@ -21,7 +21,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.stream.Stream;
public class ItemSpellbook extends Item implements DataHolderItem {
public class ItemSpellbook extends Item implements IotaHolderItem {
public static String TAG_SELECTED_PAGE = "page_idx";
// this is a CompoundTag of string numerical keys to SpellData
// it is 1-indexed, so that 0/0 can be the special case of "it is empty"
@ -86,7 +86,7 @@ public class ItemSpellbook extends Item implements DataHolderItem {
}
}
DataHolderItem.appendHoverText(this, stack, tooltip, isAdvanced);
IotaHolderItem.appendHoverText(this, stack, tooltip, isAdvanced);
super.appendHoverText(stack, level, tooltip, isAdvanced);
}
@ -112,7 +112,7 @@ public class ItemSpellbook extends Item implements DataHolderItem {
}
@Override
public @Nullable CompoundTag readDatumTag(ItemStack stack) {
public @Nullable CompoundTag readIotaTag(ItemStack stack) {
int idx = GetPage(stack, 1);
var key = String.valueOf(idx);
var tag = NBTHelper.getCompound(stack, TAG_PAGES);
@ -124,7 +124,7 @@ public class ItemSpellbook extends Item implements DataHolderItem {
}
@Override
public @Nullable LegacySpellDatum<?> emptyDatum(ItemStack stack) {
public @Nullable LegacySpellDatum<?> emptyIota(ItemStack stack) {
return LegacySpellDatum.make(Widget.NULL);
}

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items.colorizer;
import at.petrak.hexcasting.api.addldata.Colorizer;
import at.petrak.hexcasting.api.addldata.ADColorizer;
import at.petrak.hexcasting.api.item.ColorizerItem;
import net.minecraft.Util;
import net.minecraft.world.item.Item;
@ -44,7 +44,7 @@ public class ItemPrideColorizer extends Item implements ColorizerItem {
@Override
public int color(ItemStack stack, UUID owner, float time, Vec3 position) {
return Colorizer.morphBetweenColors(getColors(), new Vec3(0.1, 0.1, 0.1), time / 20 / 20, position);
return ADColorizer.morphBetweenColors(getColors(), new Vec3(0.1, 0.1, 0.1), time / 20 / 20, position);
}
public int[] getColors() {

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items.colorizer;
import at.petrak.hexcasting.api.addldata.Colorizer;
import at.petrak.hexcasting.api.addldata.ADColorizer;
import at.petrak.hexcasting.api.item.ColorizerItem;
import at.petrak.paucal.api.PaucalAPI;
import net.minecraft.world.item.Item;
@ -35,7 +35,7 @@ public class ItemUUIDColorizer extends Item implements ColorizerItem {
}
}
if (ok) {
return Colorizer.morphBetweenColors(colors, new Vec3(0.1, 0.1, 0.1), time / 20 / 20, position);
return ADColorizer.morphBetweenColors(colors, new Vec3(0.1, 0.1, 0.1), time / 20 / 20, position);
}
}
}

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items.magic;
import at.petrak.hexcasting.api.item.ManaHolderItem;
import at.petrak.hexcasting.api.item.MediaHolderItem;
import at.petrak.hexcasting.api.misc.ManaConstants;
import at.petrak.hexcasting.api.utils.NBTHelper;
import at.petrak.hexcasting.common.lib.HexItems;
@ -27,7 +27,7 @@ import java.util.Locale;
import static at.petrak.hexcasting.api.HexAPI.modLoc;
public class ItemCreativeUnlocker extends Item implements ManaHolderItem {
public class ItemCreativeUnlocker extends Item implements MediaHolderItem {
public static boolean isDebug(ItemStack stack) {
return stack.is(HexItems.CREATIVE_UNLOCKER)
@ -42,22 +42,22 @@ public class ItemCreativeUnlocker extends Item implements ManaHolderItem {
}
@Override
public int getMana(ItemStack stack) {
public int getMedia(ItemStack stack) {
return Integer.MAX_VALUE;
}
@Override
public int getMaxMana(ItemStack stack) {
public int getMaxMedia(ItemStack stack) {
return Integer.MAX_VALUE - 1;
}
@Override
public void setMana(ItemStack stack, int mana) {
public void setMedia(ItemStack stack, int media) {
// NO-OP
}
@Override
public boolean manaProvider(ItemStack stack) {
public boolean canProvideMedia(ItemStack stack) {
return true;
}

View file

@ -9,16 +9,16 @@ import org.jetbrains.annotations.NotNull;
import static at.petrak.hexcasting.api.HexAPI.modLoc;
public class ItemManaBattery extends ItemManaHolder {
public class ItemMediaBattery extends ItemMediaHolder {
public static final ResourceLocation MANA_PREDICATE = modLoc("mana");
public static final ResourceLocation MAX_MANA_PREDICATE = modLoc("max_mana");
public ItemManaBattery(Properties pProperties) {
public ItemMediaBattery(Properties pProperties) {
super(pProperties);
}
@Override
public boolean manaProvider(ItemStack stack) {
public boolean canProvideMedia(ItemStack stack) {
return true;
}
@ -40,7 +40,7 @@ public class ItemManaBattery extends ItemManaHolder {
};
for (int manamount : manamounts) {
var stack = new ItemStack(this);
items.add(ItemManaHolder.withMana(stack, manamount, manamount));
items.add(ItemMediaHolder.withMana(stack, manamount, manamount));
}
}
}

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.items.magic;
import at.petrak.hexcasting.api.item.ManaHolderItem;
import at.petrak.hexcasting.api.item.MediaHolderItem;
import at.petrak.hexcasting.api.utils.ManaHelper;
import at.petrak.hexcasting.api.utils.NBTHelper;
import net.minecraft.ChatFormatting;
@ -15,17 +15,17 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
public abstract class ItemManaHolder extends Item implements ManaHolderItem {
public abstract class ItemMediaHolder extends Item implements MediaHolderItem {
public static final String TAG_MANA = "hexcasting:mana";
public static final String TAG_MAX_MANA = "hexcasting:start_mana";
public ItemManaHolder(Properties pProperties) {
public ItemMediaHolder(Properties pProperties) {
super(pProperties);
}
public static ItemStack withMana(ItemStack stack, int mana, int maxMana) {
Item item = stack.getItem();
if (item instanceof ItemManaHolder) {
if (item instanceof ItemMediaHolder) {
NBTHelper.putInt(stack, TAG_MANA, mana);
NBTHelper.putInt(stack, TAG_MAX_MANA, maxMana);
}
@ -34,36 +34,36 @@ public abstract class ItemManaHolder extends Item implements ManaHolderItem {
}
@Override
public int getMana(ItemStack stack) {
public int getMedia(ItemStack stack) {
return NBTHelper.getInt(stack, TAG_MANA);
}
@Override
public int getMaxMana(ItemStack stack) {
public int getMaxMedia(ItemStack stack) {
return NBTHelper.getInt(stack, TAG_MAX_MANA);
}
@Override
public void setMana(ItemStack stack, int mana) {
NBTHelper.putInt(stack, TAG_MANA, Mth.clamp(mana, 0, getMaxMana(stack)));
public void setMedia(ItemStack stack, int media) {
NBTHelper.putInt(stack, TAG_MANA, Mth.clamp(media, 0, getMaxMedia(stack)));
}
@Override
public boolean isBarVisible(ItemStack pStack) {
return getMaxMana(pStack) > 0;
return getMaxMedia(pStack) > 0;
}
@Override
public int getBarColor(ItemStack pStack) {
var mana = getMana(pStack);
var maxMana = getMaxMana(pStack);
var mana = getMedia(pStack);
var maxMana = getMaxMedia(pStack);
return ManaHelper.manaBarColor(mana, maxMana);
}
@Override
public int getBarWidth(ItemStack pStack) {
var mana = getMana(pStack);
var maxMana = getMaxMana(pStack);
var mana = getMedia(pStack);
var maxMana = getMaxMedia(pStack);
return ManaHelper.manaBarWidth(mana, maxMana);
}
@ -75,11 +75,11 @@ public abstract class ItemManaHolder extends Item implements ManaHolderItem {
@Override
public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Component> pTooltipComponents,
TooltipFlag pIsAdvanced) {
if (pIsAdvanced.isAdvanced() && getMaxMana(pStack) > 0) {
if (pIsAdvanced.isAdvanced() && getMaxMedia(pStack) > 0) {
pTooltipComponents.add(
new TranslatableComponent("item.hexcasting.manaholder.amount",
String.format("%,d", getMana(pStack)),
String.format("%,d", getMaxMana(pStack)),
String.format("%,d", getMedia(pStack)),
String.format("%,d", getMaxMedia(pStack)),
100f * getManaFullness(pStack)).withStyle(ChatFormatting.GRAY));
}

View file

@ -32,7 +32,7 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc;
/**
* Item that holds a list of patterns in it ready to be cast
*/
public abstract class ItemPackagedHex extends ItemManaHolder implements HexHolderItem {
public abstract class ItemPackagedHex extends ItemMediaHolder implements HexHolderItem {
public static final String TAG_PATTERNS = "patterns";
public static final ResourceLocation HAS_PATTERNS_PRED = modLoc("has_patterns");
@ -48,7 +48,7 @@ public abstract class ItemPackagedHex extends ItemManaHolder implements HexHolde
}
@Override
public boolean manaProvider(ItemStack stack) {
public boolean canProvideMedia(ItemStack stack) {
return false;
}
@ -116,7 +116,7 @@ public abstract class ItemPackagedHex extends ItemManaHolder implements HexHolde
var harness = new CastingHarness(ctx);
var info = harness.executeIotas(instrs, sPlayer.getLevel());
boolean broken = breakAfterDepletion() && getMana(stack) == 0;
boolean broken = breakAfterDepletion() && getMedia(stack) == 0;
Stat<?> stat;
if (broken) {

View file

@ -6,6 +6,7 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions;
import net.minecraft.core.Registry;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import org.jetbrains.annotations.ApiStatus;
@ -26,6 +27,21 @@ public class HexIotaTypes {
KEY_TYPE = HexAPI.MOD_ID + ":type",
KEY_DATA = HexAPI.MOD_ID + ":data";
public static CompoundTag serialize(Iota iota) {
var type = iota.getType();
var typeId = REGISTRY.getKey(type);
if (typeId == null) {
throw new IllegalStateException(
"Tried to serialize an unregistered iota type. Iota: " + iota
+ " ; Type" + type.getClass().getTypeName());
}
var dataTag = iota.serialize();
var out = new CompoundTag();
out.putString(KEY_TYPE, typeId.toString());
out.put(KEY_DATA, dataTag);
return out;
}
/**
* This method attempts to find the type from the {@code type} key.
* See {@link HexIotaTypes#getTypeFromTag} for the storage format.
@ -69,6 +85,19 @@ public class HexIotaTypes {
return type.deserialize(tag, world);
}
@Nullable
public static Component getDisplay(CompoundTag tag) {
var type = getTypeFromTag(tag);
if (type == null) {
return null;
}
var dataKey = tag.get(KEY_DATA);
if (dataKey == null) {
return null;
}
return type.display(tag);
}
@ApiStatus.Internal
public static void registerTypes() {
BiConsumer<IotaType<?>, ResourceLocation> r = (type, id) -> Registry.register(REGISTRY, id, type);

View file

@ -64,8 +64,8 @@ public class HexItems {
public static final ItemSlate SLATE = make("slate", new ItemSlate(HexBlocks.SLATE, props()));
public static final ItemManaBattery BATTERY = make("battery",
new ItemManaBattery(new Item.Properties().stacksTo(1)));
public static final ItemMediaBattery BATTERY = make("battery",
new ItemMediaBattery(new Item.Properties().stacksTo(1)));
public static final EnumMap<DyeColor, ItemDyeColorizer> DYE_COLORIZERS = Util.make(() -> {
var out = new EnumMap<DyeColor, ItemDyeColorizer>(DyeColor.class);

View file

@ -121,7 +121,7 @@ public record MsgShiftScrollSyn(InteractionHand hand, double scrollDelta, boolea
sender.level.playSound(null, sender.getX(), sender.getY(), sender.getZ(),
HexSounds.ABACUS, SoundSource.PLAYERS, 0.5f, pitch);
var datumTag = HexItems.ABACUS.readDatumTag(stack);
var datumTag = HexItems.ABACUS.readIotaTag(stack);
if (datumTag != null) {
var popup = LegacySpellDatum.displayFromNBT(datumTag);
sender.displayClientMessage(

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.recipe;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.utils.NBTHelper;
import at.petrak.hexcasting.common.items.ItemFocus;
import at.petrak.hexcasting.common.lib.HexItems;
@ -23,7 +23,7 @@ public class SealFocusRecipe extends ShapelessRecipe {
private static ItemStack getSealedStack() {
ItemStack output = new ItemStack(HexItems.FOCUS);
NBTHelper.putBoolean(output, ItemFocus.TAG_SEALED, true);
NBTHelper.putString(output, DataHolderItem.TAG_OVERRIDE_VISUALLY, "any");
NBTHelper.putString(output, IotaHolderItem.TAG_OVERRIDE_VISUALLY, "any");
return output;
}

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.common.recipe;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.utils.NBTHelper;
import at.petrak.hexcasting.common.items.ItemSpellbook;
import at.petrak.hexcasting.common.lib.HexItems;
@ -23,7 +23,7 @@ public class SealSpellbookRecipe extends ShapelessRecipe {
private static ItemStack getSealedStack() {
ItemStack output = new ItemStack(HexItems.SPELLBOOK);
ItemSpellbook.SetSealed(output, true);
NBTHelper.putString(output, DataHolderItem.TAG_OVERRIDE_VISUALLY, "any");
NBTHelper.putString(output, IotaHolderItem.TAG_OVERRIDE_VISUALLY, "any");
return output;
}

View file

@ -1,9 +1,9 @@
package at.petrak.hexcasting.xplat;
import at.petrak.hexcasting.api.HexAPI;
import at.petrak.hexcasting.api.addldata.DataHolder;
import at.petrak.hexcasting.api.addldata.HexHolder;
import at.petrak.hexcasting.api.addldata.ManaHolder;
import at.petrak.hexcasting.api.addldata.ADHexHolder;
import at.petrak.hexcasting.api.addldata.ADIotaHolder;
import at.petrak.hexcasting.api.addldata.ADMediaHolder;
import at.petrak.hexcasting.api.misc.FrozenColorizer;
import at.petrak.hexcasting.api.player.FlightAbility;
import at.petrak.hexcasting.api.player.Sentinel;
@ -96,13 +96,13 @@ public interface IXplatAbstractions {
void clearCastingData(ServerPlayer player);
@Nullable
ManaHolder findManaHolder(ItemStack stack);
ADMediaHolder findManaHolder(ItemStack stack);
@Nullable
DataHolder findDataHolder(ItemStack stack);
ADIotaHolder findDataHolder(ItemStack stack);
@Nullable
HexHolder findHexHolder(ItemStack stack);
ADHexHolder findHexHolder(ItemStack stack);
// coooollooorrrs

View file

@ -136,7 +136,7 @@
"hexcasting.spelldata.onitem": "Contains: %s",
"hexcasting.spelldata.anything": "Anything",
"hexcasting.spelldata.unknown": "Unknown data (this is a bug)",
"hexcasting.spelldata.entity.whoknows": "An Entity (this should only show up if this was stored before the 0.5.0 update, use Scribe's Reflection, Scribe's Gambit to fix)",
"hexcasting.spelldata.entity.whoknows": "An Unknown Entity",
"hexcasting.spelldata.akashic.nopos": "The owning record does not know of any iota here (this is a bug)",
"gui.hexcasting.spellcasting": "Hex Grid",

View file

@ -1,66 +0,0 @@
package at.petrak.hexcasting.fabric.cc;
import at.petrak.hexcasting.api.addldata.DataHolder;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import dev.onyxstudios.cca.api.v3.item.ItemComponent;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import java.util.function.Function;
public abstract class CCDataHolder extends ItemComponent implements DataHolder {
public CCDataHolder(ItemStack stack) {
super(stack, HexCardinalComponents.DATA_HOLDER);
}
public static class ItemBased extends CCDataHolder {
private final DataHolderItem dataHolder;
public ItemBased(ItemStack stack) {
super(stack);
if (!(stack.getItem() instanceof DataHolderItem data)) {
throw new IllegalStateException("item is not a data holder: " + stack);
}
this.dataHolder = data;
}
@Override
public @Nullable CompoundTag readRawDatum() {
return this.dataHolder.readDatumTag(this.stack);
}
@Override
public boolean writeDatum(@Nullable LegacySpellDatum<?> datum, boolean simulate) {
var canWrite = this.dataHolder.canWrite(this.stack, datum);
if (!canWrite) {
return false;
}
if (!simulate) {
this.dataHolder.writeDatum(this.stack, datum);
}
return true;
}
}
public static class Static extends CCDataHolder {
private final Function<ItemStack, LegacySpellDatum<?>> provider;
public Static(ItemStack stack, Function<ItemStack, LegacySpellDatum<?>> provider) {
super(stack);
this.provider = provider;
}
@Override
public @Nullable CompoundTag readRawDatum() {
LegacySpellDatum<?> datum = this.provider.apply(this.stack);
return datum == null ? null : datum.serializeToNBT();
}
@Override
public boolean writeDatum(@Nullable LegacySpellDatum<?> datum, boolean simulate) {
return false;
}
}
}

View file

@ -1,12 +1,17 @@
package at.petrak.hexcasting.fabric.cc;
import at.petrak.hexcasting.api.addldata.ADMediaHolder;
import at.petrak.hexcasting.api.item.ColorizerItem;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.HexHolderItem;
import at.petrak.hexcasting.api.item.ManaHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.item.MediaHolderItem;
import at.petrak.hexcasting.api.mod.HexConfig;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.iota.DoubleIota;
import at.petrak.hexcasting.common.lib.HexItems;
import at.petrak.hexcasting.fabric.cc.adimpl.CCColorizer;
import at.petrak.hexcasting.fabric.cc.adimpl.CCHexHolder;
import at.petrak.hexcasting.fabric.cc.adimpl.CCIotaHolder;
import at.petrak.hexcasting.fabric.cc.adimpl.CCMediaHolder;
import dev.onyxstudios.cca.api.v3.component.ComponentKey;
import dev.onyxstudios.cca.api.v3.component.ComponentRegistry;
import dev.onyxstudios.cca.api.v3.entity.EntityComponentFactoryRegistry;
@ -37,10 +42,10 @@ public class HexCardinalComponents implements EntityComponentInitializer, ItemCo
public static final ComponentKey<CCColorizer> COLORIZER = ComponentRegistry.getOrCreate(modLoc("colorizer"),
CCColorizer.class);
public static final ComponentKey<CCDataHolder> DATA_HOLDER = ComponentRegistry.getOrCreate(modLoc("data_holder"),
CCDataHolder.class);
public static final ComponentKey<CCManaHolder> MANA_HOLDER = ComponentRegistry.getOrCreate(modLoc("mana_holder"),
CCManaHolder.class);
public static final ComponentKey<CCIotaHolder> DATA_HOLDER = ComponentRegistry.getOrCreate(modLoc("data_holder"),
CCIotaHolder.class);
public static final ComponentKey<CCMediaHolder> MEDIA_HOLDER = ComponentRegistry.getOrCreate(modLoc("mana_holder"),
CCMediaHolder.class);
public static final ComponentKey<CCHexHolder> HEX_HOLDER = ComponentRegistry.getOrCreate(modLoc("hex_holder"),
CCHexHolder.class);
@ -59,21 +64,21 @@ public class HexCardinalComponents implements EntityComponentInitializer, ItemCo
public void registerItemComponentFactories(ItemComponentFactoryRegistry registry) {
registry.register(i -> i instanceof ColorizerItem, COLORIZER, CCColorizer.ItemBased::new);
registry.register(i -> i instanceof DataHolderItem, DATA_HOLDER, CCDataHolder.ItemBased::new);
registry.register(i -> i instanceof IotaHolderItem, DATA_HOLDER, CCIotaHolder.ItemBased::new);
// oh havoc, you think you're so funny
// the worst part is you're /right/
registry.register(Items.PUMPKIN_PIE, DATA_HOLDER, stack -> new CCDataHolder.Static(stack,
s -> LegacySpellDatum.make(Math.PI * s.getCount())));
registry.register(Items.PUMPKIN_PIE, DATA_HOLDER, stack ->
new CCIotaHolder.Static(stack, s -> new DoubleIota(Math.PI * s.getCount())));
registry.register(i -> i instanceof ManaHolderItem, MANA_HOLDER, CCManaHolder.ItemBased::new);
registry.register(HexItems.AMETHYST_DUST, MANA_HOLDER, s -> new CCManaHolder.Static(
() -> HexConfig.common().dustManaAmount(), 30, s
registry.register(i -> i instanceof MediaHolderItem, MEDIA_HOLDER, CCMediaHolder.ItemBased::new);
registry.register(HexItems.AMETHYST_DUST, MEDIA_HOLDER, s -> new CCMediaHolder.Static(
() -> HexConfig.common().dustManaAmount(), ADMediaHolder.AMETHYST_DUST_PRIORITY, s
));
registry.register(Items.AMETHYST_SHARD, MANA_HOLDER, s -> new CCManaHolder.Static(
() -> HexConfig.common().shardManaAmount(), 20, s
registry.register(Items.AMETHYST_SHARD, MEDIA_HOLDER, s -> new CCMediaHolder.Static(
() -> HexConfig.common().shardManaAmount(), ADMediaHolder.AMETHYST_SHARD_PRIORITY, s
));
registry.register(HexItems.CHARGED_AMETHYST, MANA_HOLDER, s -> new CCManaHolder.Static(
() -> HexConfig.common().chargedCrystalManaAmount(), 10, s
registry.register(HexItems.CHARGED_AMETHYST, MEDIA_HOLDER, s -> new CCMediaHolder.Static(
() -> HexConfig.common().chargedCrystalManaAmount(), ADMediaHolder.CHARGED_AMETHYST_PRIORITY, s
));
registry.register(i -> i instanceof HexHolderItem, HEX_HOLDER, CCHexHolder.ItemBased::new);

View file

@ -1,7 +1,8 @@
package at.petrak.hexcasting.fabric.cc;
package at.petrak.hexcasting.fabric.cc.adimpl;
import at.petrak.hexcasting.api.addldata.Colorizer;
import at.petrak.hexcasting.api.addldata.ADColorizer;
import at.petrak.hexcasting.api.item.ColorizerItem;
import at.petrak.hexcasting.fabric.cc.HexCardinalComponents;
import dev.onyxstudios.cca.api.v3.item.ItemComponent;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.phys.Vec3;
@ -11,7 +12,7 @@ import java.util.UUID;
/**
* The colorizer itself
*/
public abstract class CCColorizer extends ItemComponent implements Colorizer {
public abstract class CCColorizer extends ItemComponent implements ADColorizer {
public CCColorizer(ItemStack stack) {
super(stack, HexCardinalComponents.COLORIZER);
}

View file

@ -1,8 +1,9 @@
package at.petrak.hexcasting.fabric.cc;
package at.petrak.hexcasting.fabric.cc.adimpl;
import at.petrak.hexcasting.api.addldata.HexHolder;
import at.petrak.hexcasting.api.addldata.ADHexHolder;
import at.petrak.hexcasting.api.item.HexHolderItem;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.fabric.cc.HexCardinalComponents;
import dev.onyxstudios.cca.api.v3.item.ItemComponent;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.ItemStack;
@ -10,7 +11,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
public abstract class CCHexHolder extends ItemComponent implements HexHolder {
public abstract class CCHexHolder extends ItemComponent implements ADHexHolder {
public CCHexHolder(ItemStack stack) {
super(stack, HexCardinalComponents.HEX_HOLDER);
}

View file

@ -0,0 +1,68 @@
package at.petrak.hexcasting.fabric.cc.adimpl;
import at.petrak.hexcasting.api.addldata.ADIotaHolder;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.spell.iota.Iota;
import at.petrak.hexcasting.common.lib.HexIotaTypes;
import at.petrak.hexcasting.fabric.cc.HexCardinalComponents;
import dev.onyxstudios.cca.api.v3.item.ItemComponent;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import java.util.function.Function;
public abstract class CCIotaHolder extends ItemComponent implements ADIotaHolder {
public CCIotaHolder(ItemStack stack) {
super(stack, HexCardinalComponents.DATA_HOLDER);
}
public static class ItemBased extends CCIotaHolder {
private final IotaHolderItem iotaHolder;
public ItemBased(ItemStack stack) {
super(stack);
if (!(stack.getItem() instanceof IotaHolderItem data)) {
throw new IllegalStateException("item is not a data holder: " + stack);
}
this.iotaHolder = data;
}
@Override
public @Nullable CompoundTag readIotaTag() {
return this.iotaHolder.readIotaTag(this.stack);
}
@Override
public boolean writeIota(@Nullable Iota iota, boolean simulate) {
var canWrite = this.iotaHolder.canWrite(this.stack, iota);
if (!canWrite) {
return false;
}
if (!simulate) {
this.iotaHolder.writeDatum(this.stack, iota);
}
return true;
}
}
public static class Static extends CCIotaHolder {
private final Function<ItemStack, Iota> provider;
public Static(ItemStack stack, Function<ItemStack, Iota> provider) {
super(stack);
this.provider = provider;
}
@Override
public @Nullable CompoundTag readIotaTag() {
var iota = this.provider.apply(this.stack);
return iota == null ? null : HexIotaTypes.serialize(iota);
}
@Override
public boolean writeIota(@Nullable Iota datum, boolean simulate) {
return false;
}
}
}

View file

@ -1,56 +1,57 @@
package at.petrak.hexcasting.fabric.cc;
package at.petrak.hexcasting.fabric.cc.adimpl;
import at.petrak.hexcasting.api.addldata.ManaHolder;
import at.petrak.hexcasting.api.item.ManaHolderItem;
import at.petrak.hexcasting.api.addldata.ADMediaHolder;
import at.petrak.hexcasting.api.item.MediaHolderItem;
import at.petrak.hexcasting.fabric.cc.HexCardinalComponents;
import dev.onyxstudios.cca.api.v3.item.ItemComponent;
import net.minecraft.world.item.ItemStack;
import java.util.function.Supplier;
public abstract class CCManaHolder extends ItemComponent implements ManaHolder {
public CCManaHolder(ItemStack stack) {
super(stack, HexCardinalComponents.MANA_HOLDER);
public abstract class CCMediaHolder extends ItemComponent implements ADMediaHolder {
public CCMediaHolder(ItemStack stack) {
super(stack, HexCardinalComponents.MEDIA_HOLDER);
}
public static class ItemBased extends CCManaHolder {
private final ManaHolderItem manaHolder;
public static class ItemBased extends CCMediaHolder {
private final MediaHolderItem mediaHolder;
public ItemBased(ItemStack stack) {
super(stack);
if (!(stack.getItem() instanceof ManaHolderItem mana)) {
throw new IllegalStateException("item is not a mana holder: " + stack);
if (!(stack.getItem() instanceof MediaHolderItem mana)) {
throw new IllegalStateException("item is not a media holder: " + stack);
}
this.manaHolder = mana;
this.mediaHolder = mana;
}
@Override
public int getMana() {
return this.manaHolder.getMana(this.stack);
public int getMedia() {
return this.mediaHolder.getMedia(this.stack);
}
@Override
public int getMaxMana() {
return this.manaHolder.getMaxMana(this.stack);
public int getMaxMedia() {
return this.mediaHolder.getMaxMedia(this.stack);
}
@Override
public void setMana(int mana) {
this.manaHolder.setMana(this.stack, mana);
public void setMedia(int media) {
this.mediaHolder.setMedia(this.stack, media);
}
@Override
public boolean canRecharge() {
return this.manaHolder.canRecharge(this.stack);
return this.mediaHolder.canRecharge(this.stack);
}
@Override
public boolean canProvide() {
return this.manaHolder.manaProvider(this.stack);
return this.mediaHolder.canProvideMedia(this.stack);
}
@Override
public int getConsumptionPriority() {
return 40;
return ADMediaHolder.BATTERY_PRIORITY;
}
@Override
@ -59,12 +60,12 @@ public abstract class CCManaHolder extends ItemComponent implements ManaHolder {
}
@Override
public int withdrawMana(int cost, boolean simulate) {
return this.manaHolder.withdrawMana(this.stack, cost, simulate);
public int withdrawMedia(int cost, boolean simulate) {
return this.mediaHolder.withdrawMana(this.stack, cost, simulate);
}
}
public static class Static extends CCManaHolder {
public static class Static extends CCMediaHolder {
private final Supplier<Integer> baseWorth;
private final int consumptionPriority;
@ -75,17 +76,17 @@ public abstract class CCManaHolder extends ItemComponent implements ManaHolder {
}
@Override
public int getMana() {
public int getMedia() {
return baseWorth.get() * stack.getCount();
}
@Override
public int getMaxMana() {
return getMana();
public int getMaxMedia() {
return getMedia();
}
@Override
public void setMana(int mana) {
public void setMedia(int media) {
// NO-OP
}
@ -110,7 +111,7 @@ public abstract class CCManaHolder extends ItemComponent implements ManaHolder {
}
@Override
public int withdrawMana(int cost, boolean simulate) {
public int withdrawMedia(int cost, boolean simulate) {
int worth = baseWorth.get();
if (cost < 0) {
cost = worth * stack.getCount();

View file

@ -0,0 +1,8 @@
/**
* Some Cardinal Components in the mod are substitutes for Forge's ability to store arbitrary data on an entity;
* some are implementations of the Additional Data abstraction.
* <p>
* In the root of this folder are the substitutes for entitydata;
* in the {@link at.petrak.hexcasting.fabric.cc.adimpl adimpl} folder are the implementations of additional datas.
*/
package at.petrak.hexcasting.fabric.cc;

View file

@ -1,6 +1,6 @@
package at.petrak.hexcasting.fabric.recipe;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.utils.NBTHelper;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@ -30,7 +30,7 @@ public class FabricUnsealedIngredient extends BaseCustomIngredient {
.filter((it) -> it != DatumType.EMPTY && it != DatumType.OTHER)
.map((type) -> {
ItemStack newStack = stack.copy();
NBTHelper.putString(newStack, DataHolderItem.TAG_OVERRIDE_VISUALLY, SpellDatum.tagForType(type));
NBTHelper.putString(newStack, IotaHolderItem.TAG_OVERRIDE_VISUALLY, SpellDatum.tagForType(type));
return new Ingredient.ItemValue(newStack);
}));
this.stack = stack;

View file

@ -1,9 +1,9 @@
package at.petrak.hexcasting.fabric.xplat;
import at.petrak.hexcasting.api.HexAPI;
import at.petrak.hexcasting.api.addldata.DataHolder;
import at.petrak.hexcasting.api.addldata.HexHolder;
import at.petrak.hexcasting.api.addldata.ManaHolder;
import at.petrak.hexcasting.api.addldata.ADHexHolder;
import at.petrak.hexcasting.api.addldata.ADIotaHolder;
import at.petrak.hexcasting.api.addldata.ADMediaHolder;
import at.petrak.hexcasting.api.misc.FrozenColorizer;
import at.petrak.hexcasting.api.mod.HexConfig;
import at.petrak.hexcasting.api.mod.HexItemTags;
@ -213,21 +213,21 @@ public class FabricXplatImpl implements IXplatAbstractions {
@Override
public @Nullable
ManaHolder findManaHolder(ItemStack stack) {
var cc = HexCardinalComponents.MANA_HOLDER.maybeGet(stack);
ADMediaHolder findManaHolder(ItemStack stack) {
var cc = HexCardinalComponents.MEDIA_HOLDER.maybeGet(stack);
return cc.orElse(null);
}
@Override
public @Nullable
DataHolder findDataHolder(ItemStack stack) {
ADIotaHolder findDataHolder(ItemStack stack) {
var cc = HexCardinalComponents.DATA_HOLDER.maybeGet(stack);
return cc.orElse(null);
}
@Override
public @Nullable
HexHolder findHexHolder(ItemStack stack) {
ADHexHolder findHexHolder(ItemStack stack) {
var cc = HexCardinalComponents.HEX_HOLDER.maybeGet(stack);
return cc.orElse(null);
}

View file

@ -1,16 +1,18 @@
package at.petrak.hexcasting.forge.cap;
import at.petrak.hexcasting.api.addldata.Colorizer;
import at.petrak.hexcasting.api.addldata.DataHolder;
import at.petrak.hexcasting.api.addldata.HexHolder;
import at.petrak.hexcasting.api.addldata.ManaHolder;
import at.petrak.hexcasting.api.addldata.ADColorizer;
import at.petrak.hexcasting.api.addldata.ADHexHolder;
import at.petrak.hexcasting.api.addldata.ADIotaHolder;
import at.petrak.hexcasting.api.addldata.ADMediaHolder;
import at.petrak.hexcasting.api.block.circle.BlockEntityAbstractImpetus;
import at.petrak.hexcasting.api.item.ColorizerItem;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.item.HexHolderItem;
import at.petrak.hexcasting.api.item.ManaHolderItem;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.item.MediaHolderItem;
import at.petrak.hexcasting.api.mod.HexConfig;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.iota.DoubleIota;
import at.petrak.hexcasting.api.spell.iota.Iota;
import at.petrak.hexcasting.common.lib.HexIotaTypes;
import at.petrak.hexcasting.common.lib.HexItems;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
@ -36,69 +38,100 @@ import java.util.function.BooleanSupplier;
import java.util.function.Function;
import java.util.function.Supplier;
public class ForgeCapabilityHandler {
private static final ResourceLocation DATA_HOLDER_CAPABILITY = new ResourceLocation("hexcasting", "data_holder");
private static final ResourceLocation DATA_ITEM_CAPABILITY = new ResourceLocation("hexcasting", "data_item");
private static final ResourceLocation MANA_HOLDER_CAPABILITY = new ResourceLocation("hexcasting", "mana_holder");
private static final ResourceLocation MANA_ITEM_CAPABILITY = new ResourceLocation("hexcasting", "mana_item");
private static final ResourceLocation SPELL_HOLDER_CAPABILITY = new ResourceLocation("hexcasting", "spell_item");
private static final ResourceLocation COLORIZER_CAPABILITY = new ResourceLocation("hexcasting", "colorizer");
import static at.petrak.hexcasting.api.HexAPI.modLoc;
private static final ResourceLocation IMPETUS_HANDLER = new ResourceLocation("hexcasting", "impetus_items");
public class ForgeCapabilityHandler {
/**
* Items that store an iota to their tag.
*/
public static final ResourceLocation IOTA_STORAGE_CAP = modLoc("data_holder");
/**
* Items that intrinsically store an iota.
*/
public static final ResourceLocation IOTA_STATIC_CAP = modLoc("data_item");
/**
* Items that store a variable amount of media to their tag.
*/
public static final ResourceLocation MEDIA_STORAGE_CAP = modLoc("mana_holder");
/**
* Items that statically provide media.
*/
public static final ResourceLocation MEDIA_STATIC_CAP = modLoc("mana_item");
/**
* Items that store a packaged Hex.
*/
public static final ResourceLocation HEX_HOLDER_CAP = modLoc("spell_item");
/**
* Items that work as pigments.
*/
public static final ResourceLocation PIGMENT_CAP = modLoc("colorizer");
private static final ResourceLocation IMPETUS_HANDLER = modLoc("impetus_items");
public static void registerCaps(RegisterCapabilitiesEvent evt) {
evt.register(ManaHolder.class);
evt.register(DataHolder.class);
evt.register(HexHolder.class);
evt.register(Colorizer.class);
evt.register(ADMediaHolder.class);
evt.register(ADIotaHolder.class);
evt.register(ADHexHolder.class);
evt.register(ADColorizer.class);
}
public static void attachItemCaps(AttachCapabilitiesEvent<ItemStack> evt) {
ItemStack stack = evt.getObject();
if (stack.getItem() instanceof ManaHolderItem holder)
evt.addCapability(MANA_HOLDER_CAPABILITY, provide(stack, HexCapabilities.MANA,
() -> new ItemBasedManaHolder(holder, stack)));
else if (stack.is(HexItems.AMETHYST_DUST))
evt.addCapability(MANA_ITEM_CAPABILITY, provide(stack, HexCapabilities.MANA,
() -> new StaticManaHolder(HexConfig.common()::dustManaAmount, 3, stack)));
else if (stack.is(Items.AMETHYST_SHARD))
evt.addCapability(MANA_ITEM_CAPABILITY, provide(stack, HexCapabilities.MANA,
() -> new StaticManaHolder(HexConfig.common()::shardManaAmount, 2, stack)));
else if (stack.is(HexItems.CHARGED_AMETHYST))
evt.addCapability(MANA_ITEM_CAPABILITY, provide(stack, HexCapabilities.MANA,
() -> new StaticManaHolder(HexConfig.common()::chargedCrystalManaAmount, 1, stack)));
if (stack.getItem() instanceof DataHolderItem holder)
evt.addCapability(DATA_HOLDER_CAPABILITY, provide(stack, HexCapabilities.DATUM,
() -> new ItemBasedDataHolder(holder, stack)));
else if (stack.is(Items.PUMPKIN_PIE)) // haha yes
evt.addCapability(DATA_ITEM_CAPABILITY, provide(stack, HexCapabilities.DATUM,
() -> new StaticDatumHolder((s) -> LegacySpellDatum.make(Math.PI * s.getCount()), stack)));
if (stack.getItem() instanceof MediaHolderItem holder) {
evt.addCapability(MEDIA_STORAGE_CAP,
provide(stack, HexCapabilities.MANA, () -> new ItemBasedManaHolder(holder, stack)));
} else if (stack.is(HexItems.AMETHYST_DUST)) {
evt.addCapability(MEDIA_STATIC_CAP, provide(stack, HexCapabilities.MANA, () ->
new StaticManaHolder(HexConfig.common()::dustManaAmount, ADMediaHolder.AMETHYST_DUST_PRIORITY, stack)));
} else if (stack.is(Items.AMETHYST_SHARD)) {
evt.addCapability(MEDIA_STATIC_CAP, provide(stack, HexCapabilities.MANA, () -> new StaticManaHolder(
HexConfig.common()::shardManaAmount, ADMediaHolder.AMETHYST_SHARD_PRIORITY, stack)));
} else if (stack.is(HexItems.CHARGED_AMETHYST)) {
evt.addCapability(MEDIA_STATIC_CAP,
provide(stack, HexCapabilities.MANA, () -> new StaticManaHolder(
HexConfig.common()::chargedCrystalManaAmount, ADMediaHolder.CHARGED_AMETHYST_PRIORITY, stack)));
}
if (stack.getItem() instanceof HexHolderItem holder)
evt.addCapability(SPELL_HOLDER_CAPABILITY, provide(stack, HexCapabilities.STORED_HEX,
() -> new ItemBasedHexHolder(holder, stack)));
if (stack.getItem() instanceof IotaHolderItem holder) {
evt.addCapability(IOTA_STORAGE_CAP,
provide(stack, HexCapabilities.DATUM, () -> new ItemBasedDataHolder(holder, stack)));
} else if (stack.is(Items.PUMPKIN_PIE)) {
// haha yes
evt.addCapability(IOTA_STATIC_CAP, provide(stack, HexCapabilities.DATUM, () ->
new StaticDatumHolder((s) -> new DoubleIota(Math.PI * s.getCount()), stack)));
}
if (stack.getItem() instanceof ColorizerItem colorizer)
evt.addCapability(COLORIZER_CAPABILITY, provide(stack, HexCapabilities.COLOR,
() -> new ItemBasedColorizer(colorizer, stack)));
if (stack.getItem() instanceof HexHolderItem holder) {
evt.addCapability(HEX_HOLDER_CAP,
provide(stack, HexCapabilities.STORED_HEX, () -> new ItemBasedHexHolder(holder, stack)));
}
if (stack.getItem() instanceof ColorizerItem colorizer) {
evt.addCapability(PIGMENT_CAP,
provide(stack, HexCapabilities.COLOR, () -> new ItemBasedColorizer(colorizer, stack)));
}
}
public static void attachBlockEntityCaps(AttachCapabilitiesEvent<BlockEntity> evt) {
if (evt.getObject() instanceof BlockEntityAbstractImpetus impetus)
if (evt.getObject() instanceof BlockEntityAbstractImpetus impetus) {
evt.addCapability(IMPETUS_HANDLER, provide(impetus, CapabilityItemHandler.ITEM_HANDLER_CAPABILITY,
() -> new ForgeImpetusCapability(impetus)));
}
}
private static <CAP> SimpleProvider<CAP> provide(BlockEntity be, Capability<CAP> capability, NonNullSupplier<CAP> supplier) {
private static <CAP> SimpleProvider<CAP> provide(BlockEntity be, Capability<CAP> capability,
NonNullSupplier<CAP> supplier) {
return provide(be::isRemoved, capability, supplier);
}
private static <CAP> SimpleProvider<CAP> provide(ItemStack stack, Capability<CAP> capability, NonNullSupplier<CAP> supplier) {
private static <CAP> SimpleProvider<CAP> provide(ItemStack stack, Capability<CAP> capability,
NonNullSupplier<CAP> supplier) {
return provide(stack::isEmpty, capability, supplier);
}
private static <CAP> SimpleProvider<CAP> provide(BooleanSupplier invalidated, Capability<CAP> capability, NonNullSupplier<CAP> supplier) {
private static <CAP> SimpleProvider<CAP> provide(BooleanSupplier invalidated, Capability<CAP> capability,
NonNullSupplier<CAP> supplier) {
return new SimpleProvider<>(invalidated, capability, LazyOptional.of(supplier));
}
@ -109,8 +142,9 @@ public class ForgeCapabilityHandler {
@NotNull
@Override
public <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
if (invalidated.getAsBoolean())
if (invalidated.getAsBoolean()) {
return LazyOptional.empty();
}
return cap == capability ? instance.cast() : LazyOptional.empty();
}
@ -118,19 +152,19 @@ public class ForgeCapabilityHandler {
private record StaticManaHolder(Supplier<Integer> baseWorth,
int consumptionPriority,
ItemStack stack) implements ManaHolder {
ItemStack stack) implements ADMediaHolder {
@Override
public int getMana() {
public int getMedia() {
return baseWorth.get() * stack.getCount();
}
@Override
public int getMaxMana() {
return getMana();
public int getMaxMedia() {
return getMedia();
}
@Override
public void setMana(int mana) {
public void setMedia(int media) {
// NO-OP
}
@ -155,7 +189,7 @@ public class ForgeCapabilityHandler {
}
@Override
public int withdrawMana(int cost, boolean simulate) {
public int withdrawMedia(int cost, boolean simulate) {
int worth = baseWorth.get();
if (cost < 0) {
cost = worth * stack.getCount();
@ -169,22 +203,22 @@ public class ForgeCapabilityHandler {
}
}
private record ItemBasedManaHolder(ManaHolderItem holder,
ItemStack stack) implements ManaHolder {
private record ItemBasedManaHolder(MediaHolderItem holder,
ItemStack stack) implements ADMediaHolder {
@Override
public int getMana() {
return holder.getMana(stack);
public int getMedia() {
return holder.getMedia(stack);
}
@Override
public int getMaxMana() {
return holder.getMaxMana(stack);
public int getMaxMedia() {
return holder.getMaxMedia(stack);
}
@Override
public void setMana(int mana) {
holder.setMana(stack, mana);
public void setMedia(int media) {
holder.setMedia(stack, media);
}
@Override
@ -194,7 +228,7 @@ public class ForgeCapabilityHandler {
@Override
public boolean canProvide() {
return holder.manaProvider(stack);
return holder.canProvideMedia(stack);
}
@Override
@ -208,68 +242,68 @@ public class ForgeCapabilityHandler {
}
@Override
public int withdrawMana(int cost, boolean simulate) {
public int withdrawMedia(int cost, boolean simulate) {
return holder.withdrawMana(stack, cost, simulate);
}
}
private record StaticDatumHolder(Function<ItemStack, LegacySpellDatum<?>> provider,
ItemStack stack) implements DataHolder {
private record StaticDatumHolder(Function<ItemStack, Iota> provider,
ItemStack stack) implements ADIotaHolder {
@Override
public @Nullable
CompoundTag readRawDatum() {
LegacySpellDatum<?> datum = provider.apply(stack);
return datum == null ? null : datum.serializeToNBT();
CompoundTag readIotaTag() {
var iota = provider.apply(stack);
return iota == null ? null : HexIotaTypes.serialize(iota);
}
@Override
public @Nullable
LegacySpellDatum<?> readDatum(ServerLevel world) {
Iota readIota(ServerLevel world) {
return provider.apply(stack);
}
@Override
public boolean writeDatum(@Nullable LegacySpellDatum<?> datum, boolean simulate) {
public boolean writeIota(@Nullable Iota iota, boolean simulate) {
return false;
}
}
private record ItemBasedDataHolder(DataHolderItem holder,
ItemStack stack) implements DataHolder {
private record ItemBasedDataHolder(IotaHolderItem holder,
ItemStack stack) implements ADIotaHolder {
@Override
public @Nullable
CompoundTag readRawDatum() {
return holder.readDatumTag(stack);
CompoundTag readIotaTag() {
return holder.readIotaTag(stack);
}
@Override
public @Nullable
LegacySpellDatum<?> readDatum(ServerLevel world) {
return holder.readDatum(stack, world);
Iota readIota(ServerLevel world) {
return holder.readIota(stack, world);
}
@Override
public @Nullable
LegacySpellDatum<?> emptyDatum() {
return holder.emptyDatum(stack);
Iota emptyIota() {
return holder.emptyIota(stack);
}
@Override
public boolean writeDatum(@Nullable LegacySpellDatum<?> datum, boolean simulate) {
if (!holder.canWrite(stack, datum)) {
public boolean writeIota(@Nullable Iota iota, boolean simulate) {
if (!holder.canWrite(stack, iota)) {
return false;
}
if (!simulate) {
holder.writeDatum(stack, datum);
holder.writeDatum(stack, iota);
}
return true;
}
}
private record ItemBasedHexHolder(HexHolderItem holder,
ItemStack stack) implements HexHolder {
ItemStack stack) implements ADHexHolder {
@Override
public boolean canDrawManaFromInventory() {
@ -282,12 +316,12 @@ public class ForgeCapabilityHandler {
}
@Override
public @Nullable List<LegacySpellDatum<?>> getHex(ServerLevel level) {
public @Nullable List<Iota> getHex(ServerLevel level) {
return holder.getHex(stack, level);
}
@Override
public void writeHex(List<LegacySpellDatum<?>> patterns, int mana) {
public void writeHex(List<Iota> patterns, int mana) {
holder.writeHex(stack, patterns, mana);
}
@ -298,7 +332,7 @@ public class ForgeCapabilityHandler {
}
private record ItemBasedColorizer(ColorizerItem holder,
ItemStack stack) implements Colorizer {
ItemStack stack) implements ADColorizer {
@Override
public int color(UUID owner, float time, Vec3 position) {
return holder.color(stack, owner, time, position);

View file

@ -1,21 +1,21 @@
package at.petrak.hexcasting.forge.cap;
import at.petrak.hexcasting.api.addldata.Colorizer;
import at.petrak.hexcasting.api.addldata.DataHolder;
import at.petrak.hexcasting.api.addldata.HexHolder;
import at.petrak.hexcasting.api.addldata.ManaHolder;
import at.petrak.hexcasting.api.addldata.ADColorizer;
import at.petrak.hexcasting.api.addldata.ADHexHolder;
import at.petrak.hexcasting.api.addldata.ADIotaHolder;
import at.petrak.hexcasting.api.addldata.ADMediaHolder;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.common.capabilities.CapabilityToken;
public final class HexCapabilities {
public static final Capability<ManaHolder> MANA = CapabilityManager.get(new CapabilityToken<>() {
public static final Capability<ADMediaHolder> MANA = CapabilityManager.get(new CapabilityToken<>() {
});
public static final Capability<DataHolder> DATUM = CapabilityManager.get(new CapabilityToken<>() {
public static final Capability<ADIotaHolder> DATUM = CapabilityManager.get(new CapabilityToken<>() {
});
public static final Capability<HexHolder> STORED_HEX = CapabilityManager.get(new CapabilityToken<>() {
public static final Capability<ADHexHolder> STORED_HEX = CapabilityManager.get(new CapabilityToken<>() {
});
public static final Capability<Colorizer> COLOR = CapabilityManager.get(new CapabilityToken<>() {
public static final Capability<ADColorizer> COLOR = CapabilityManager.get(new CapabilityToken<>() {
});
}

View file

@ -6,7 +6,7 @@ import at.petrak.hexcasting.common.items.ItemScroll;
import at.petrak.hexcasting.common.items.ItemSlate;
import at.petrak.hexcasting.common.items.ItemWand;
import at.petrak.hexcasting.common.items.colorizer.ItemPrideColorizer;
import at.petrak.hexcasting.common.items.magic.ItemManaBattery;
import at.petrak.hexcasting.common.items.magic.ItemMediaBattery;
import at.petrak.hexcasting.common.items.magic.ItemPackagedHex;
import at.petrak.hexcasting.common.lib.HexBlocks;
import at.petrak.hexcasting.common.lib.HexItems;
@ -122,8 +122,8 @@ public class HexItemModels extends PaucalItemModelProvider {
float fillProp = (float) fill / maxFill;
getBuilder(HexItems.BATTERY.getRegistryName().getPath()).override()
.predicate(ItemManaBattery.MANA_PREDICATE, fillProp)
.predicate(ItemManaBattery.MAX_MANA_PREDICATE, size)
.predicate(ItemMediaBattery.MANA_PREDICATE, fillProp)
.predicate(ItemMediaBattery.MAX_MANA_PREDICATE, size)
.model(new ModelFile.UncheckedModelFile(modLoc("item/" + name)))
.end();
}

View file

@ -1,7 +1,7 @@
package at.petrak.hexcasting.forge.recipe;
import at.petrak.hexcasting.api.addldata.DataHolder;
import at.petrak.hexcasting.api.item.DataHolderItem;
import at.petrak.hexcasting.api.addldata.ADIotaHolder;
import at.petrak.hexcasting.api.item.IotaHolderItem;
import at.petrak.hexcasting.api.spell.DatumType;
import at.petrak.hexcasting.api.spell.LegacySpellDatum;
import at.petrak.hexcasting.api.spell.Widget;
@ -30,7 +30,7 @@ public class ForgeUnsealedIngredient extends AbstractIngredient {
.filter((it) -> it != DatumType.EMPTY && it != DatumType.OTHER)
.map((type) -> {
ItemStack newStack = stack.copy();
NBTHelper.putString(newStack, DataHolderItem.TAG_OVERRIDE_VISUALLY, LegacySpellDatum.tagForType(type));
NBTHelper.putString(newStack, IotaHolderItem.TAG_OVERRIDE_VISUALLY, LegacySpellDatum.tagForType(type));
return new Ingredient.ItemValue(newStack);
}));
this.stack = stack;
@ -49,9 +49,9 @@ public class ForgeUnsealedIngredient extends AbstractIngredient {
return false;
}
if (this.stack.getItem() == input.getItem() && this.stack.getDamageValue() == input.getDamageValue()) {
DataHolder holder = IXplatAbstractions.INSTANCE.findDataHolder(this.stack);
ADIotaHolder holder = IXplatAbstractions.INSTANCE.findDataHolder(this.stack);
if (holder != null) {
return holder.readRawDatum() != null && holder.writeDatum(LegacySpellDatum.make(Widget.NULL), true);
return holder.readIotaTag() != null && holder.writeIota(LegacySpellDatum.make(Widget.NULL), true);
}
}

View file

@ -1,10 +1,10 @@
package at.petrak.hexcasting.forge.xplat;
import at.petrak.hexcasting.api.HexAPI;
import at.petrak.hexcasting.api.addldata.Colorizer;
import at.petrak.hexcasting.api.addldata.DataHolder;
import at.petrak.hexcasting.api.addldata.HexHolder;
import at.petrak.hexcasting.api.addldata.ManaHolder;
import at.petrak.hexcasting.api.addldata.ADColorizer;
import at.petrak.hexcasting.api.addldata.ADHexHolder;
import at.petrak.hexcasting.api.addldata.ADIotaHolder;
import at.petrak.hexcasting.api.addldata.ADMediaHolder;
import at.petrak.hexcasting.api.misc.FrozenColorizer;
import at.petrak.hexcasting.api.mod.HexItemTags;
import at.petrak.hexcasting.api.player.FlightAbility;
@ -253,21 +253,21 @@ public class ForgeXplatImpl implements IXplatAbstractions {
@Override
public @Nullable
ManaHolder findManaHolder(ItemStack stack) {
ADMediaHolder findManaHolder(ItemStack stack) {
var maybeCap = stack.getCapability(HexCapabilities.MANA).resolve();
return maybeCap.orElse(null);
}
@Override
public @Nullable
DataHolder findDataHolder(ItemStack stack) {
ADIotaHolder findDataHolder(ItemStack stack) {
var maybeCap = stack.getCapability(HexCapabilities.DATUM).resolve();
return maybeCap.orElse(null);
}
@Override
public @Nullable
HexHolder findHexHolder(ItemStack stack) {
ADHexHolder findHexHolder(ItemStack stack) {
var maybeCap = stack.getCapability(HexCapabilities.STORED_HEX).resolve();
return maybeCap.orElse(null);
}
@ -281,7 +281,7 @@ public class ForgeXplatImpl implements IXplatAbstractions {
public int getRawColor(FrozenColorizer colorizer, float time, Vec3 position) {
var maybeColorizer = colorizer.item().getCapability(HexCapabilities.COLOR).resolve();
if (maybeColorizer.isPresent()) {
Colorizer col = maybeColorizer.get();
ADColorizer col = maybeColorizer.get();
return col.color(colorizer.owner(), time, position);
}