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;
|
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 info.shylie.testmod.spell.trick.Tricks;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ public class ShylieTestMod implements ModInitializer {
|
|||||||
|
|
||||||
LOGGER.info("Hello Fabric world!");
|
LOGGER.info("Hello Fabric world!");
|
||||||
|
|
||||||
FragmentTypes.register();
|
FragmentType.register();
|
||||||
Tricks.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.EndecTomfoolery;
|
||||||
import dev.enjarai.trickster.spell.Fragment;
|
import dev.enjarai.trickster.spell.Fragment;
|
||||||
import dev.enjarai.trickster.spell.fragment.FragmentType;
|
|
||||||
import dev.ryanhcode.sable.api.sublevel.SubLevelContainer;
|
import dev.ryanhcode.sable.api.sublevel.SubLevelContainer;
|
||||||
import dev.ryanhcode.sable.sublevel.SubLevel;
|
import dev.ryanhcode.sable.sublevel.SubLevel;
|
||||||
import io.wispforest.endec.StructEndec;
|
import io.wispforest.endec.StructEndec;
|
||||||
@ -21,8 +20,8 @@ public record SubLevelFragment(UUID uuid) implements Fragment {
|
|||||||
public static final int WEIGHT = 8;
|
public static final int WEIGHT = 8;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FragmentType<?> type() {
|
public dev.enjarai.trickster.spell.fragment.FragmentType<?> type() {
|
||||||
return FragmentTypes.SUBLEVEL;
|
return FragmentType.SUBLEVEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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.SpellContext;
|
||||||
import dev.enjarai.trickster.spell.blunder.BlockTooHardBlunder;
|
import dev.enjarai.trickster.spell.blunder.BlockTooHardBlunder;
|
||||||
import dev.enjarai.trickster.spell.blunder.BlockUnoccupiedBlunder;
|
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.fragment.VectorFragment;
|
||||||
import dev.enjarai.trickster.spell.trick.Trick;
|
import dev.enjarai.trickster.spell.trick.Trick;
|
||||||
import dev.enjarai.trickster.spell.type.Signature;
|
import dev.enjarai.trickster.spell.type.Signature;
|
||||||
import dev.ryanhcode.sable.api.SubLevelAssemblyHelper;
|
import dev.ryanhcode.sable.api.SubLevelAssemblyHelper;
|
||||||
import dev.ryanhcode.sable.companion.math.BoundingBox3i;
|
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 info.shylie.testmod.spell.fragment.SubLevelFragment;
|
||||||
import io.vavr.collection.Array;
|
import io.vavr.collection.Array;
|
||||||
|
|
||||||
public class TestTrick extends Trick<TestTrick> {
|
public class TestTrick extends Trick<TestTrick> {
|
||||||
public 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) {
|
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.Pattern;
|
||||||
import dev.enjarai.trickster.spell.SpellContext;
|
import dev.enjarai.trickster.spell.SpellContext;
|
||||||
import dev.enjarai.trickster.spell.execution.TickData;
|
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.VectorFragment;
|
||||||
import dev.enjarai.trickster.spell.fragment.VoidFragment;
|
|
||||||
import dev.enjarai.trickster.spell.trick.Trick;
|
import dev.enjarai.trickster.spell.trick.Trick;
|
||||||
import dev.enjarai.trickster.spell.type.Signature;
|
import dev.enjarai.trickster.spell.type.Signature;
|
||||||
|
import dev.ryanhcode.sable.api.sublevel.SubLevelContainer;
|
||||||
import dev.ryanhcode.sable.sublevel.ServerSubLevel;
|
import dev.ryanhcode.sable.sublevel.ServerSubLevel;
|
||||||
import info.shylie.testmod.ShylieTestMod;
|
import info.shylie.testmod.ShylieTestMod;
|
||||||
import info.shylie.testmod.spell.blunder.UnknownSubLevelBlunder;
|
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 info.shylie.testmod.spell.fragment.SubLevelFragment;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
import org.joml.Vector3d;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static dev.enjarai.trickster.spell.fragment.FragmentType.VECTOR;
|
||||||
|
|
||||||
public class TestTrick2 extends Trick<TestTrick2> {
|
public class TestTrick2 extends Trick<TestTrick2> {
|
||||||
private static final TickData.Key<HashMap<SubLevelFragment, Float>> COMPOUND_LEN = new TickData.Key<>(
|
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() {
|
public TestTrick2() {
|
||||||
super(
|
super(
|
||||||
Pattern.of(3, 6, 4, 5),
|
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));
|
var subLevel = target.getSublevel(ctx.source().getWorld()).orElseThrow(() -> new UnknownSubLevelBlunder(this));
|
||||||
subLevel.markRemoved();
|
if ((subLevel instanceof ServerSubLevel serverSubLevel)) {
|
||||||
return VoidFragment.INSTANCE;
|
// 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 class Tricks {
|
||||||
public static final TestTrick TEST = register("test", new TestTrick());
|
public static final TestTrick TEST = register("test", new TestTrick());
|
||||||
public static final TestTrick2 TEST_2 = register("test_2", new TestTrick2());
|
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() {
|
public static void register() {
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user