i've been patching up the harness, all the live-long day
This commit is contained in:
parent
ca5ccf60f6
commit
a501f774c3
13 changed files with 39 additions and 32 deletions
|
@ -1,6 +1,6 @@
|
|||
package at.petrak.hexcasting.api.casting.eval
|
||||
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
|
||||
/**
|
||||
* Information sent back to the client
|
||||
|
@ -9,7 +9,9 @@ data class ExecutionClientView(
|
|||
val isStackClear: Boolean,
|
||||
val resolutionType: ResolvedPatternType,
|
||||
|
||||
val stackDescs: List<Component>,
|
||||
val ravenmind: Component?,
|
||||
// These must be tags so the wrapping of the text can happen on the client
|
||||
// otherwise we don't know when to stop rendering
|
||||
val stackDescs: List<CompoundTag>,
|
||||
val ravenmind: CompoundTag?,
|
||||
)
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@ import net.minecraft.server.level.ServerLevel
|
|||
* [CastingEnvironment] to affect the world.
|
||||
*/
|
||||
class CastingVM(var image: CastingImage, val env: CastingEnvironment) {
|
||||
|
||||
/**
|
||||
* Execute a single iota.
|
||||
*/
|
||||
|
@ -229,11 +228,10 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) {
|
|||
}
|
||||
}
|
||||
|
||||
fun generateDescs(): Pair<List<Component>, Component?> {
|
||||
val stackDescs = this.image.stack.map { it.display() }
|
||||
fun generateDescs(): Pair<List<CompoundTag>, CompoundTag?> {
|
||||
val stackDescs = this.image.stack.map { IotaType.serialize(it) }
|
||||
val ravenmind = if (this.image.userData.contains(HexAPI.RAVENMIND_USERDATA)) {
|
||||
val tag = this.image.userData.getCompound(HexAPI.RAVENMIND_USERDATA)
|
||||
IotaType.getDisplay(tag)
|
||||
this.image.userData.getCompound(HexAPI.RAVENMIND_USERDATA)
|
||||
} else null
|
||||
return Pair(stackDescs, ravenmind)
|
||||
}
|
||||
|
@ -357,4 +355,11 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) {
|
|||
data class TempControllerInfo(
|
||||
var earlyExit: Boolean,
|
||||
)
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun empty(env: CastingEnvironment): CastingVM {
|
||||
return CastingVM(CastingImage(), env)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package at.petrak.hexcasting.client;
|
||||
|
||||
import at.petrak.hexcasting.api.casting.iota.IotaType;
|
||||
import at.petrak.hexcasting.api.item.IotaHolderItem;
|
||||
import at.petrak.hexcasting.api.item.MediaHolderItem;
|
||||
import at.petrak.hexcasting.api.misc.MediaConstants;
|
||||
|
|
|
@ -40,7 +40,6 @@ class GuiSpellcasting constructor(
|
|||
private val handOpenedWith: InteractionHand,
|
||||
private var patterns: MutableList<ResolvedPattern>,
|
||||
private var cachedStack: List<CompoundTag>,
|
||||
private var cachedParens: List<CompoundTag>,
|
||||
private var cachedRavenmind: CompoundTag?,
|
||||
private var parenCount: Int,
|
||||
) : Screen("gui.hexcasting.spellcasting".asTranslatedComponent) {
|
||||
|
@ -67,10 +66,8 @@ class GuiSpellcasting constructor(
|
|||
it.type = info.resolutionType
|
||||
}
|
||||
|
||||
this.cachedStack = info.stack
|
||||
this.cachedParens = info.parenthesized
|
||||
this.cachedStack = info.stackDescs
|
||||
this.cachedRavenmind = info.ravenmind
|
||||
this.parenCount = info.parenCount
|
||||
this.calculateIotaDisplays()
|
||||
}
|
||||
|
||||
|
|
|
@ -53,6 +53,11 @@ public class PackagedItemCastEnv extends PlayerBasedCastEnv {
|
|||
return costLeft;
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionHand castingHand() {
|
||||
return this.castingHand;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FrozenColorizer getColorizer() {
|
||||
return null;
|
||||
|
|
|
@ -77,10 +77,10 @@ public class StaffCastEnv extends PlayerBasedCastEnv {
|
|||
ExecutionClientView clientInfo = harness.queueAndExecuteIota(new PatternIota(msg.pattern()), sender.getLevel());
|
||||
|
||||
if (clientInfo.isStackClear()) {
|
||||
IXplatAbstractions.INSTANCE.setHarness(sender, null);
|
||||
IXplatAbstractions.INSTANCE.setStaffcastImage(sender, null);
|
||||
IXplatAbstractions.INSTANCE.setPatterns(sender, List.of());
|
||||
} else {
|
||||
IXplatAbstractions.INSTANCE.setHarness(sender, harness);
|
||||
IXplatAbstractions.INSTANCE.setStaffcastImage(sender, harness);
|
||||
if (!resolvedPatterns.isEmpty()) {
|
||||
resolvedPatterns.get(resolvedPatterns.size() - 1).setType(clientInfo.getResolutionType());
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package at.petrak.hexcasting.common.items.magic;
|
||||
|
||||
import at.petrak.hexcasting.api.casting.eval.CastingEnvironment;
|
||||
import at.petrak.hexcasting.api.casting.eval.vm.CastingVM;
|
||||
import at.petrak.hexcasting.api.casting.iota.Iota;
|
||||
import at.petrak.hexcasting.api.casting.iota.IotaType;
|
||||
import at.petrak.hexcasting.api.item.HexHolderItem;
|
||||
import at.petrak.hexcasting.api.utils.NBTHelper;
|
||||
import at.petrak.hexcasting.common.casting.env.PackagedItemCastEnv;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.nbt.Tag;
|
||||
|
@ -108,9 +108,9 @@ public abstract class ItemPackagedHex extends ItemMediaHolder implements HexHold
|
|||
return InteractionResultHolder.fail(stack);
|
||||
}
|
||||
var sPlayer = (ServerPlayer) player;
|
||||
var ctx = new CastingEnvironment(sPlayer, usedHand, CastingEnvironment.CastSource.PACKAGED_HEX);
|
||||
var harness = new CastingVM(ctx);
|
||||
var info = harness.queueAndExecuteIotas(instrs, sPlayer.getLevel());
|
||||
var ctx = new PackagedItemCastEnv(sPlayer, usedHand);
|
||||
var harness = CastingVM.empty(ctx);
|
||||
harness.queueAndExecuteIotas(instrs, sPlayer.getLevel());
|
||||
|
||||
boolean broken = breakAfterDepletion() && getMedia(stack) == 0;
|
||||
|
||||
|
@ -133,11 +133,6 @@ public abstract class ItemPackagedHex extends ItemMediaHolder implements HexHold
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUseDuration(ItemStack pStack) {
|
||||
return 16;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UseAnim getUseAnimation(ItemStack pStack) {
|
||||
return UseAnim.BLOCK;
|
||||
|
|
|
@ -8,6 +8,7 @@ import at.petrak.hexcasting.api.casting.ActionRegistryEntry;
|
|||
import at.petrak.hexcasting.api.casting.castables.SpecialHandler;
|
||||
import at.petrak.hexcasting.api.casting.eval.ResolvedPattern;
|
||||
import at.petrak.hexcasting.api.casting.eval.sideeffects.EvalSound;
|
||||
import at.petrak.hexcasting.api.casting.eval.vm.CastingImage;
|
||||
import at.petrak.hexcasting.api.casting.eval.vm.CastingVM;
|
||||
import at.petrak.hexcasting.api.casting.iota.IotaType;
|
||||
import at.petrak.hexcasting.api.misc.FrozenColorizer;
|
||||
|
@ -82,7 +83,7 @@ public interface IXplatAbstractions {
|
|||
|
||||
void setAltiora(Player target, @Nullable AltioraAbility altiora);
|
||||
|
||||
void setHarness(ServerPlayer target, @Nullable CastingVM harness);
|
||||
void setStaffcastImage(ServerPlayer target, @Nullable CastingImage image);
|
||||
|
||||
void setPatterns(ServerPlayer target, List<ResolvedPattern> patterns);
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@ import net.minecraft.server.level.ServerPlayer;
|
|||
import net.minecraft.world.InteractionHand;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class CCHarness implements Component {
|
||||
public class CCStaffcastImage implements Component {
|
||||
public static final String TAG_HARNESS = "harness";
|
||||
|
||||
private final ServerPlayer owner;
|
||||
private CompoundTag lazyLoadedTag = new CompoundTag();
|
||||
|
||||
public CCHarness(ServerPlayer owner) {
|
||||
public CCStaffcastImage(ServerPlayer owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
|
@ -45,8 +45,8 @@ public class HexCardinalComponents implements EntityComponentInitializer, ItemCo
|
|||
|
||||
public static final ComponentKey<CCAltiora> ALTIORA = ComponentRegistry.getOrCreate(modLoc("altiora"),
|
||||
CCAltiora.class);
|
||||
public static final ComponentKey<CCHarness> HARNESS = ComponentRegistry.getOrCreate(modLoc("harness"),
|
||||
CCHarness.class);
|
||||
public static final ComponentKey<CCStaffcastImage> HARNESS = ComponentRegistry.getOrCreate(modLoc("harness"),
|
||||
CCStaffcastImage.class);
|
||||
public static final ComponentKey<CCPatterns> PATTERNS = ComponentRegistry.getOrCreate(modLoc("patterns"),
|
||||
CCPatterns.class);
|
||||
|
||||
|
@ -67,7 +67,7 @@ public class HexCardinalComponents implements EntityComponentInitializer, ItemCo
|
|||
registry.registerForPlayers(ALTIORA, CCAltiora::new, RespawnCopyStrategy.LOSSLESS_ONLY);
|
||||
// Fortunately these are all both only needed on the server and don't want to be copied across death
|
||||
registry.registerFor(ServerPlayer.class, FLIGHT, CCFlight::new);
|
||||
registry.registerFor(ServerPlayer.class, HARNESS, CCHarness::new);
|
||||
registry.registerFor(ServerPlayer.class, HARNESS, CCStaffcastImage::new);
|
||||
registry.registerFor(ServerPlayer.class, PATTERNS, CCPatterns::new);
|
||||
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import at.petrak.hexcasting.api.casting.ActionRegistryEntry;
|
|||
import at.petrak.hexcasting.api.casting.castables.SpecialHandler;
|
||||
import at.petrak.hexcasting.api.casting.eval.ResolvedPattern;
|
||||
import at.petrak.hexcasting.api.casting.eval.sideeffects.EvalSound;
|
||||
import at.petrak.hexcasting.api.casting.eval.vm.CastingImage;
|
||||
import at.petrak.hexcasting.api.casting.eval.vm.CastingVM;
|
||||
import at.petrak.hexcasting.api.casting.iota.IotaType;
|
||||
import at.petrak.hexcasting.api.misc.FrozenColorizer;
|
||||
|
@ -170,7 +171,7 @@ public class FabricXplatImpl implements IXplatAbstractions {
|
|||
cc.setAltiora(altiora);
|
||||
}
|
||||
|
||||
public void setHarness(ServerPlayer target, CastingHarness harness) {
|
||||
public void setHarness(ServerPlayer target, CastingImage image) {
|
||||
var cc = HexCardinalComponents.HARNESS.get(target);
|
||||
cc.setHarness(harness);
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CapSyncers {
|
|||
x.setAltiora(player, x.getAltiora(proto));
|
||||
x.setSentinel(player, x.getSentinel(proto));
|
||||
x.setColorizer(player, x.getColorizer(proto));
|
||||
x.setHarness(player, x.getStaffHarness(proto, InteractionHand.MAIN_HAND));
|
||||
x.setStaffcastImage(player, x.getStaffHarness(proto, InteractionHand.MAIN_HAND));
|
||||
x.setPatterns(player, x.getPatternsSavedInUi(proto));
|
||||
}
|
||||
|
||||
|
|
|
@ -214,7 +214,7 @@ public class ForgeXplatImpl implements IXplatAbstractions {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setHarness(ServerPlayer player, CastingVM harness) {
|
||||
public void setStaffcastImage(ServerPlayer player, CastingVM harness) {
|
||||
player.getPersistentData().put(TAG_HARNESS, harness == null ? new CompoundTag() : harness.serializeToNBT());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue