60 lines
2 KiB
Java
60 lines
2 KiB
Java
package at.petrak.hexcasting.api.casting.eval.env;
|
|
|
|
import at.petrak.hexcasting.api.casting.eval.CastResult;
|
|
import at.petrak.hexcasting.api.casting.eval.sideeffects.EvalSound;
|
|
import at.petrak.hexcasting.api.pigment.FrozenPigment;
|
|
import at.petrak.hexcasting.common.lib.hex.HexEvalSounds;
|
|
import at.petrak.hexcasting.xplat.IXplatAbstractions;
|
|
import net.minecraft.server.level.ServerPlayer;
|
|
import net.minecraft.world.InteractionHand;
|
|
|
|
public class PackagedItemCastEnv extends PlayerBasedCastEnv {
|
|
|
|
protected EvalSound sound = HexEvalSounds.NOTHING;
|
|
|
|
public PackagedItemCastEnv(ServerPlayer caster, InteractionHand castingHand) {
|
|
super(caster, castingHand);
|
|
}
|
|
|
|
@Override
|
|
public void postExecution(CastResult result) {
|
|
super.postExecution(result);
|
|
// TODO: how do we know when to actually play this sound?
|
|
this.sound = this.sound.greaterOf(result.getSound());
|
|
}
|
|
|
|
@Override
|
|
public long extractMedia(long costLeft) {
|
|
if (this.caster.isCreative())
|
|
return 0;
|
|
|
|
var casterStack = this.caster.getItemInHand(this.castingHand);
|
|
var casterHexHolder = IXplatAbstractions.INSTANCE.findHexHolder(casterStack);
|
|
var canCastFromInv = casterHexHolder.canDrawMediaFromInventory();
|
|
|
|
var casterMediaHolder = IXplatAbstractions.INSTANCE.findMediaHolder(casterStack);
|
|
|
|
// The contracts on the AD and on this function are different.
|
|
// ADs return the amount extracted, this wants the amount left
|
|
if (casterMediaHolder != null) {
|
|
long extracted = casterMediaHolder.withdrawMedia((int) costLeft, false);
|
|
costLeft -= extracted;
|
|
}
|
|
if (canCastFromInv && costLeft > 0) {
|
|
costLeft = this.extractMediaFromInventory(costLeft, this.canOvercast());
|
|
}
|
|
|
|
return costLeft;
|
|
}
|
|
|
|
@Override
|
|
public InteractionHand getCastingHand() {
|
|
return this.castingHand;
|
|
}
|
|
|
|
@Override
|
|
public FrozenPigment getColorizer() {
|
|
return null;
|
|
}
|
|
}
|