Rework TestTrick2, and add QuerySubLevelTrick
Some checks failed
build / build (push) Has been cancelled
Some checks failed
build / build (push) Has been cancelled
This commit is contained in:
parent
3f1422d5a0
commit
a821a68765
@ -1,6 +1,6 @@
|
||||
package info.shylie.testmod;
|
||||
|
||||
import info.shylie.testmod.spell.fragment.FragmentTypes;
|
||||
import info.shylie.testmod.spell.fragment.FragmentType;
|
||||
import info.shylie.testmod.spell.trick.Tricks;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
|
||||
@ -24,7 +24,7 @@ public class ShylieTestMod implements ModInitializer {
|
||||
|
||||
LOGGER.info("Hello Fabric world!");
|
||||
|
||||
FragmentTypes.register();
|
||||
FragmentType.register();
|
||||
Tricks.register();
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
package info.shylie.testmod.spell.fragment;
|
||||
|
||||
import dev.enjarai.trickster.spell.Fragment;
|
||||
import info.shylie.testmod.ShylieTestMod;
|
||||
import io.wispforest.endec.StructEndec;
|
||||
import net.minecraft.core.Registry;
|
||||
|
||||
import java.util.OptionalInt;
|
||||
|
||||
public final class FragmentType {
|
||||
public static final dev.enjarai.trickster.spell.fragment.FragmentType<SubLevelFragment> SUBLEVEL = register("sublevel", SubLevelFragment.ENDEC);
|
||||
|
||||
public static void register() {
|
||||
}
|
||||
|
||||
private static <T extends Fragment> dev.enjarai.trickster.spell.fragment.FragmentType<T> register(String name, StructEndec<T> codec) {
|
||||
return Registry.register(
|
||||
dev.enjarai.trickster.spell.fragment.FragmentType.REGISTRY,
|
||||
ShylieTestMod.id(name),
|
||||
new dev.enjarai.trickster.spell.fragment.FragmentType<>(codec, OptionalInt.of(0xaaaaaa))
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -1,24 +0,0 @@
|
||||
package info.shylie.testmod.spell.fragment;
|
||||
|
||||
import dev.enjarai.trickster.spell.Fragment;
|
||||
import dev.enjarai.trickster.spell.fragment.FragmentType;
|
||||
import info.shylie.testmod.ShylieTestMod;
|
||||
import io.wispforest.endec.StructEndec;
|
||||
import net.minecraft.core.Registry;
|
||||
|
||||
import java.util.OptionalInt;
|
||||
|
||||
public final class FragmentTypes {
|
||||
public static final FragmentType<SubLevelFragment> SUBLEVEL = register("sublevel", SubLevelFragment.ENDEC);
|
||||
|
||||
public static void register() {
|
||||
}
|
||||
|
||||
private static <T extends Fragment> FragmentType<T> register(String name, StructEndec<T> codec) {
|
||||
return Registry.register(
|
||||
FragmentType.REGISTRY,
|
||||
ShylieTestMod.id(name),
|
||||
new FragmentType<>(codec, OptionalInt.of(0xaaaaaa))
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -2,7 +2,6 @@ package info.shylie.testmod.spell.fragment;
|
||||
|
||||
import dev.enjarai.trickster.EndecTomfoolery;
|
||||
import dev.enjarai.trickster.spell.Fragment;
|
||||
import dev.enjarai.trickster.spell.fragment.FragmentType;
|
||||
import dev.ryanhcode.sable.api.sublevel.SubLevelContainer;
|
||||
import dev.ryanhcode.sable.sublevel.SubLevel;
|
||||
import io.wispforest.endec.StructEndec;
|
||||
@ -21,8 +20,8 @@ public record SubLevelFragment(UUID uuid) implements Fragment {
|
||||
public static final int WEIGHT = 8;
|
||||
|
||||
@Override
|
||||
public FragmentType<?> type() {
|
||||
return FragmentTypes.SUBLEVEL;
|
||||
public dev.enjarai.trickster.spell.fragment.FragmentType<?> type() {
|
||||
return FragmentType.SUBLEVEL;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
package info.shylie.testmod.spell.trick;
|
||||
|
||||
import dev.enjarai.trickster.spell.Pattern;
|
||||
import dev.enjarai.trickster.spell.SpellContext;
|
||||
import dev.enjarai.trickster.spell.fragment.VectorFragment;
|
||||
import dev.enjarai.trickster.spell.trick.Trick;
|
||||
import dev.enjarai.trickster.spell.type.Signature;
|
||||
import dev.ryanhcode.sable.Sable;
|
||||
import info.shylie.testmod.spell.blunder.UnknownSubLevelBlunder;
|
||||
import info.shylie.testmod.spell.fragment.FragmentType;
|
||||
import info.shylie.testmod.spell.fragment.SubLevelFragment;
|
||||
|
||||
import static dev.enjarai.trickster.spell.fragment.FragmentType.VECTOR;
|
||||
|
||||
public class QuerySubLevelTrick extends Trick<QuerySubLevelTrick> {
|
||||
public QuerySubLevelTrick() {
|
||||
super(
|
||||
Pattern.of(0, 6, 4, 8, 2),
|
||||
Signature.of(VECTOR, QuerySubLevelTrick::run, FragmentType.SUBLEVEL)
|
||||
);
|
||||
}
|
||||
|
||||
public SubLevelFragment run(SpellContext ctx, VectorFragment pos) {
|
||||
var subLevel = Sable.HELPER.getContaining(ctx.source().getWorld(), pos.toBlockPos());
|
||||
if (subLevel == null) {
|
||||
throw new UnknownSubLevelBlunder(this);
|
||||
}
|
||||
return new SubLevelFragment(subLevel.getUniqueId());
|
||||
}
|
||||
}
|
||||
@ -6,19 +6,18 @@ import dev.enjarai.trickster.spell.Pattern;
|
||||
import dev.enjarai.trickster.spell.SpellContext;
|
||||
import dev.enjarai.trickster.spell.blunder.BlockTooHardBlunder;
|
||||
import dev.enjarai.trickster.spell.blunder.BlockUnoccupiedBlunder;
|
||||
import dev.enjarai.trickster.spell.fragment.FragmentType;
|
||||
import dev.enjarai.trickster.spell.fragment.VectorFragment;
|
||||
import dev.enjarai.trickster.spell.trick.Trick;
|
||||
import dev.enjarai.trickster.spell.type.Signature;
|
||||
import dev.ryanhcode.sable.api.SubLevelAssemblyHelper;
|
||||
import dev.ryanhcode.sable.companion.math.BoundingBox3i;
|
||||
import info.shylie.testmod.spell.fragment.FragmentTypes;
|
||||
import info.shylie.testmod.spell.fragment.FragmentType;
|
||||
import info.shylie.testmod.spell.fragment.SubLevelFragment;
|
||||
import io.vavr.collection.Array;
|
||||
|
||||
public class TestTrick extends Trick<TestTrick> {
|
||||
public TestTrick() {
|
||||
super(Pattern.of(3, 4, 5), Signature.of(FragmentType.VECTOR, TestTrick::run, FragmentTypes.SUBLEVEL));
|
||||
super(Pattern.of(3, 4, 5), Signature.of(dev.enjarai.trickster.spell.fragment.FragmentType.VECTOR, TestTrick::run, FragmentType.SUBLEVEL));
|
||||
}
|
||||
|
||||
public SubLevelFragment run(SpellContext ctx, VectorFragment pos) {
|
||||
|
||||
@ -3,18 +3,22 @@ package info.shylie.testmod.spell.trick;
|
||||
import dev.enjarai.trickster.spell.Pattern;
|
||||
import dev.enjarai.trickster.spell.SpellContext;
|
||||
import dev.enjarai.trickster.spell.execution.TickData;
|
||||
import dev.enjarai.trickster.spell.fragment.FragmentType;
|
||||
import dev.enjarai.trickster.spell.fragment.VectorFragment;
|
||||
import dev.enjarai.trickster.spell.fragment.VoidFragment;
|
||||
import dev.enjarai.trickster.spell.trick.Trick;
|
||||
import dev.enjarai.trickster.spell.type.Signature;
|
||||
import dev.ryanhcode.sable.api.sublevel.SubLevelContainer;
|
||||
import dev.ryanhcode.sable.sublevel.ServerSubLevel;
|
||||
import info.shylie.testmod.ShylieTestMod;
|
||||
import info.shylie.testmod.spell.blunder.UnknownSubLevelBlunder;
|
||||
import info.shylie.testmod.spell.fragment.FragmentTypes;
|
||||
import info.shylie.testmod.spell.fragment.FragmentType;
|
||||
import info.shylie.testmod.spell.fragment.SubLevelFragment;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.joml.Vector3d;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import static dev.enjarai.trickster.spell.fragment.FragmentType.VECTOR;
|
||||
|
||||
public class TestTrick2 extends Trick<TestTrick2> {
|
||||
private static final TickData.Key<HashMap<SubLevelFragment, Float>> COMPOUND_LEN = new TickData.Key<>(
|
||||
@ -24,13 +28,41 @@ public class TestTrick2 extends Trick<TestTrick2> {
|
||||
public TestTrick2() {
|
||||
super(
|
||||
Pattern.of(3, 6, 4, 5),
|
||||
Signature.of(FragmentTypes.SUBLEVEL, FragmentType.VECTOR, TestTrick2::run, FragmentType.VOID)
|
||||
List.of(
|
||||
Signature.of(FragmentType.SUBLEVEL, VECTOR, TestTrick2::run, FragmentType.SUBLEVEL),
|
||||
Signature.of(FragmentType.SUBLEVEL, VECTOR, VECTOR, TestTrick2::run, FragmentType.SUBLEVEL)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public VoidFragment run(SpellContext ctx, SubLevelFragment target, VectorFragment v) throws UnknownSubLevelBlunder {
|
||||
public SubLevelFragment run(SpellContext ctx, SubLevelFragment target, VectorFragment v, VectorFragment pos) throws UnknownSubLevelBlunder {
|
||||
var subLevel = target.getSublevel(ctx.source().getWorld()).orElseThrow(() -> new UnknownSubLevelBlunder(this));
|
||||
subLevel.markRemoved();
|
||||
return VoidFragment.INSTANCE;
|
||||
if ((subLevel instanceof ServerSubLevel serverSubLevel)) {
|
||||
// not null, since subLevel isn't an empty optional
|
||||
var container = SubLevelContainer.getContainer(ctx.source().getWorld());
|
||||
|
||||
var originOfSubLevel = serverSubLevel.logicalPose().position();
|
||||
|
||||
var localPos = serverSubLevel
|
||||
.logicalPose()
|
||||
.transformPositionInverse(originOfSubLevel.add(pos.vector()), new Vector3d());
|
||||
|
||||
var localDirection = serverSubLevel
|
||||
.logicalPose()
|
||||
.transformNormalInverse(v.vector(), new Vector3d())
|
||||
.normalize().mul(v.vector().length());
|
||||
|
||||
//noinspection DataFlowIssue -- see above
|
||||
container.physicsSystem().getPhysicsHandle(serverSubLevel).applyImpulseAtPoint(localPos, localDirection);
|
||||
|
||||
return target;
|
||||
}
|
||||
else {
|
||||
throw new IllegalStateException("Not a server sublevel");
|
||||
}
|
||||
}
|
||||
|
||||
public SubLevelFragment run(SpellContext ctx, SubLevelFragment target, VectorFragment v) throws UnknownSubLevelBlunder {
|
||||
return run(ctx, target, v, VectorFragment.ZERO);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import net.minecraft.core.Registry;
|
||||
public class Tricks {
|
||||
public static final TestTrick TEST = register("test", new TestTrick());
|
||||
public static final TestTrick2 TEST_2 = register("test_2", new TestTrick2());
|
||||
public static final QuerySubLevelTrick QUERY_SUBLEVEL_TRICK = register("query_sublevel", new QuerySubLevelTrick());
|
||||
|
||||
public static void register() {
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user