Skip to content

Commit 3397867

Browse files
committed
✨ Sable Compat wip
1 parent a0491f8 commit 3397867

18 files changed

Lines changed: 348 additions & 61 deletions

File tree

buildSrc/src/main/groovy/multiloader-common.gradle

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,25 @@ repositories {
5050
includeGroup "maven.modrinth"
5151
}
5252
}
53+
maven {
54+
name = "RyanHCode Maven"
55+
url = "https://maven.ryanhcode.dev/releases"
56+
}
57+
maven {
58+
url = "http://maven.ryanhcode.dev/private"
59+
allowInsecureProtocol = true
60+
61+
credentials {
62+
credentials {
63+
username = ryanhcodeMavenUser
64+
password = ryanhcodeMavenToken
65+
}
66+
67+
authentication {
68+
basic(BasicAuthentication)
69+
}
70+
}
71+
}
5372
repositories {
5473
maven {
5574
url "https://maven.squiddev.cc"

common/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ dependencies {
2828
implementation "mezz.jei:jei-${project.minecraft_version}-common-api:${project.jei_version}"
2929

3030
implementation("net.createmod.ponder:Ponder-Common-${minecraft_version}:${ponder_version}")
31+
32+
33+
implementation ("dev.ryanhcode.sable:sable-neoforge-${minecraft_version}:${sable_version}") {
34+
exclude group: "foundry.veil"
35+
transitive = false
36+
}
37+
38+
api("dev.ryanhcode.sable-companion:sable-companion-common-${project.minecraft_version}:${project.sable_companion_version}") {
39+
exclude group: "foundry.veil"
40+
}
3141
}
3242

3343

common/src/main/java/org/modogthedev/superposition/blockentity/SignalActorBlockEntity.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@
2222
import org.jetbrains.annotations.ApiStatus;
2323
import org.jetbrains.annotations.Nullable;
2424
import org.jetbrains.annotations.Unmodifiable;
25+
import org.joml.Quaternionf;
26+
import org.joml.Vector3d;
2527
import org.modogthedev.superposition.block.SignalGeneratorBlock;
28+
import org.modogthedev.superposition.compat.sable.SableCompat;
2629
import org.modogthedev.superposition.core.SuperpositionSounds;
2730
import org.modogthedev.superposition.item.ScrewdriverItem;
2831
import org.modogthedev.superposition.networking.packet.BlockEntityModificationC2SPacket;
@@ -51,6 +54,7 @@ public abstract class SignalActorBlockEntity extends SyncedBlockEntity implement
5154
private final List<String> configurationTooltipString = new ArrayList<>();
5255
private final List<ConfigurationTooltip> configurationTooltipExecutable = new ArrayList<>();
5356
private PortConfig portConfig;
57+
protected Vector3d lightPosition = null;
5458
int signalsReceived = 0;
5559

5660
Object lastCall;
@@ -138,6 +142,11 @@ public int getTooltipYOffset() {
138142

139143
@Override
140144
protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) {
145+
if (lightPosition != null) {
146+
tag.putDouble("lightX", lightPosition.x);
147+
tag.putDouble("lightY", lightPosition.y);
148+
tag.putDouble("lightZ", lightPosition.z);
149+
}
141150
super.saveAdditional(tag, registries);
142151
}
143152

@@ -283,6 +292,8 @@ public void loadSyncedData(CompoundTag tag) {
283292
super.loadSyncedData(tag);
284293
if (tag.contains("swap"))
285294
this.level.setBlock(this.getBlockPos(), this.getBlockState().setValue(SignalGeneratorBlock.SWAP_SIDES, tag.getBoolean("swap")), 2);
295+
if (tag.contains("lightX")) {
296+
}
286297
}
287298

288299
public void addConfigTooltip(String name, ConfigurationTooltip configurationTooltip) {
@@ -351,6 +362,13 @@ public void tick() {
351362
if (this.level != null && this.level.isClientSide) {
352363
if (this.lightEnabled() && light == null && !isRemoved()) {
353364
this.createLight();
365+
if (SableCompat.isSublevel(level,getBlockPos().getCenter())) {
366+
Vec3 pos = SableCompat.tryTransform(level, getBlockPos().getCenter());
367+
lightPosition = new Vector3d(pos.x,pos.y,pos.z);
368+
} else {
369+
Vec3 center = getBlockPos().getCenter();
370+
lightPosition = new Vector3d(center.x,center.y,center.z);
371+
}
354372
if (light.getLightData() instanceof AreaLightData areaLight) {
355373
this.configureAreaLight(areaLight);
356374
}
@@ -360,6 +378,13 @@ public void tick() {
360378
light.markDirty();
361379
}
362380
if (lightEnabled() && shouldUpdateLight() && light != null && !isRemoved()) {
381+
if (SableCompat.isSublevel(level,getBlockPos().getCenter())) {
382+
Vec3 pos = SableCompat.tryTransform(level, getBlockPos().getCenter());
383+
lightPosition = new Vector3d(pos.x,pos.y,pos.z);
384+
} else {
385+
Vec3 center = getBlockPos().getCenter();
386+
lightPosition = new Vector3d(center.x,center.y,center.z);
387+
}
363388
if (light.getLightData() instanceof AreaLightData areaLight) {
364389
this.configureAreaLight(areaLight);
365390
}
@@ -435,7 +460,7 @@ public boolean lightEnabled() {
435460
}
436461

437462
public boolean shouldUpdateLight() {
438-
return false;
463+
return SableCompat.isSublevel(level,getBlockPos().getCenter());
439464
}
440465

441466
public LightData prepareLight() {
@@ -447,10 +472,15 @@ public void createLight() {
447472
}
448473

449474
public void configureAreaLight(AreaLightData light) {
450-
Vec3 center = this.getBlockPos().getCenter();
451475
Direction facing = this.getBlockState().getValue(SignalActorTickingBlock.FACING);
452-
light.getPosition().set(center.x, center.y, center.z);
453-
light.getOrientation().set(facing.getRotation().rotateX((float) (Math.PI / 2f)).rotateY((float) Math.PI));
476+
light.getPosition().set(lightPosition.x, lightPosition.y, lightPosition.z);
477+
Quaternionf rotation = facing.getRotation();
478+
Quaternionf poseRotation = SableCompat.getRotation(level, getBlockPos().getCenter());
479+
if (poseRotation != null) {
480+
rotation = poseRotation.mul(rotation);
481+
}
482+
light.getOrientation().set(rotation.mul(new Quaternionf().fromAxisAngleDeg(1,0,0,-90)).conjugate());
483+
light.setOcclusionEnabled(true);
454484
}
455485

456486
public void configurePointLight(PointLightData light) {

common/src/main/java/org/modogthedev/superposition/blockentity/SpotlightBlockEntity.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.minecraft.world.level.block.state.BlockState;
1212
import net.minecraft.world.phys.Vec3;
1313
import org.jetbrains.annotations.Nullable;
14+
import org.modogthedev.superposition.compat.sable.SableCompat;
1415
import org.modogthedev.superposition.core.SuperpositionBlockEntities;
1516
import org.modogthedev.superposition.networking.packet.BlockEntityModificationC2SPacket;
1617
import org.modogthedev.superposition.system.cable.PortConfig;
@@ -110,9 +111,8 @@ public boolean shouldUpdateLight() {
110111
public void configureAreaLight(AreaLightData light) {
111112
super.configureAreaLight(light);
112113
Direction facing = this.getBlockState().getValue(SignalActorTickingBlock.FACING);
113-
BlockPos relativePos = BlockPos.containing(0, 0, 0).relative(facing, 1);
114-
Vec3 relative = new Vec3(relativePos.getX(), relativePos.getY(), relativePos.getZ()).normalize().scale(0.99f);
115-
Vec3 center = this.getBlockPos().getCenter();
114+
Vec3 relative = SableCompat.transformNormal(level,getBlockPos().getCenter(), Vec3.atLowerCornerOf(facing.getNormal()));
115+
Vec3 center = new Vec3(lightPosition.x,lightPosition.y,lightPosition.z);
116116
if (facing == Direction.UP || facing == Direction.DOWN) {
117117
center = center.add(relative.scale(-3.5 / 16f));
118118
} else {

common/src/main/java/org/modogthedev/superposition/client/renderer/CableRenderer.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.modogthedev.superposition.Superposition;
2828
import org.modogthedev.superposition.blockentity.AnalyserBlockEntity;
2929
import org.modogthedev.superposition.blockentity.AntennaActorBlockEntity;
30+
import org.modogthedev.superposition.compat.sable.SableCompat;
3031
import org.modogthedev.superposition.core.SuperpositionConstants;
3132
import org.modogthedev.superposition.core.SuperpositionRenderTypes;
3233
import org.modogthedev.superposition.system.antenna.type.PhysicalAntenna;
@@ -75,7 +76,9 @@ public static void renderCable(Cable cable, CableClientState clientState, Vertex
7576
PREV_CABLE_POINTS.add(firstPos);
7677
if (cable.getPoints().getFirst().getAnchor() != null) {
7778
RopeNode point = cable.getPoints().getFirst();
78-
Vec3 pos = point.getAnchor().getAnchorBlock().getCenter().relative(point.getAnchor().getDirection(), 0.2f);
79+
Vec3 normal = SableCompat.transformNormal((Level) level, point.getAnchor().getAnchorBlock().getCenter() ,Vec3.atLowerCornerOf(point.getAnchor().getDirection().getNormal())).scale(-0.2f);
80+
Vec3 pos = SableCompat.tryTransform((Level) level, point.getAnchor().getAnchorBlock().getCenter()).add(normal);
81+
7982
CABLE_POINTS.add(pos);
8083
PREV_CABLE_POINTS.add(pos);
8184
}
@@ -88,7 +91,9 @@ public static void renderCable(Cable cable, CableClientState clientState, Vertex
8891

8992
if (cable.getPoints().getLast().getAnchor() != null) {
9093
RopeNode point = cable.getPoints().getLast();
91-
Vec3 pos = point.getAnchor().getAnchorBlock().getCenter().relative(point.getAnchor().getDirection(), 0.2f);
94+
Vec3 normal = SableCompat.transformNormal((Level) level, point.getAnchor().getAnchorBlock().getCenter() ,Vec3.atLowerCornerOf(point.getAnchor().getDirection().getNormal())).scale(-0.2f);
95+
Vec3 pos = SableCompat.tryTransform((Level) level, point.getAnchor().getAnchorBlock().getCenter()).add(normal);
96+
9297
CABLE_POINTS.add(pos);
9398
PREV_CABLE_POINTS.add(pos);
9499
}

common/src/main/java/org/modogthedev/superposition/client/renderer/DebugRenderer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.modogthedev.superposition.system.antenna.Antenna;
2020
import org.modogthedev.superposition.system.antenna.AntennaElement;
2121
import org.modogthedev.superposition.system.antenna.AntennaManager;
22-
import org.modogthedev.superposition.system.antenna.type.PhysicalAntenna;
2322
import org.modogthedev.superposition.system.cable.Cable;
2423
import org.modogthedev.superposition.system.cable.CableClipResult;
2524
import org.modogthedev.superposition.system.cable.CableManager;
Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,35 @@
11
package org.modogthedev.superposition.compat.sable;
22

3+
import dev.ryanhcode.sable.companion.SableCompanion;
34
import net.minecraft.world.level.Level;
45
import net.minecraft.world.phys.Vec3;
6+
import org.jetbrains.annotations.Nullable;
7+
import org.joml.Quaternionf;
58
import org.modogthedev.superposition.compat.CompatabilityHandler;
69

710
public class SableCompat {
811
public static Vec3 tryTransform(Level level, Vec3 pos) {
912
if (CompatabilityHandler.Mod.SABLE.isLoaded) {
10-
SuperpositionSableHelper.transformPosition(level,pos);
13+
return SuperpositionSableHelper.transformPosition(level,pos);
1114
}
1215
return pos;
1316
}
17+
18+
public static Vec3 transformNormal(Level level, Vec3 pos, Vec3 normal) {
19+
if (CompatabilityHandler.Mod.SABLE.isLoaded) {
20+
return SuperpositionSableHelper.transformNormal(level,pos,normal);
21+
}
22+
return normal;
23+
}
24+
25+
public static boolean isSublevel(Level level, Vec3 pos) {
26+
return SableCompanion.INSTANCE.isInPlotGrid(level,pos);
27+
}
28+
29+
public static @Nullable Quaternionf getRotation(Level level, Vec3 pos) {
30+
if (CompatabilityHandler.Mod.SABLE.isLoaded) {
31+
return SuperpositionSableHelper.getRotation(level,pos);
32+
}
33+
return null;
34+
}
1435
}
Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,49 @@
11
package org.modogthedev.superposition.compat.sable;
22

3+
import dev.ryanhcode.sable.Sable;
4+
import dev.ryanhcode.sable.companion.SableCompanion;
5+
import dev.ryanhcode.sable.companion.math.Pose3dc;
6+
import dev.ryanhcode.sable.sublevel.ClientSubLevel;
7+
import dev.ryanhcode.sable.sublevel.SubLevel;
38
import net.minecraft.world.level.Level;
49
import net.minecraft.world.phys.Vec3;
10+
import org.joml.Quaternionf;
511

612
public class SuperpositionSableHelper {
713
public static Vec3 transformPosition(Level level, Vec3 position) {
8-
return position;
14+
return SableCompanion.INSTANCE.projectOutOfSubLevel(level, position);
915
}
16+
17+
public static Vec3 transformNormal(Level level, Vec3 pos, Vec3 normal) {
18+
SubLevel sublevel = Sable.HELPER.getContaining(level, pos);
19+
Pose3dc pose = null;
20+
if (sublevel != null) {
21+
if (sublevel instanceof ClientSubLevel clientSubLevel) {
22+
pose = clientSubLevel.renderPose();
23+
} else {
24+
pose = sublevel.logicalPose();
25+
}
26+
}
27+
if (pose != null) {
28+
return pose.transformNormal(normal);
29+
}
30+
return normal;
31+
}
32+
33+
public static Quaternionf getRotation(Level level, Vec3 pos) {
34+
SubLevel sublevel = Sable.HELPER.getContaining(level, pos);
35+
Pose3dc pose = null;
36+
if (sublevel != null) {
37+
if (sublevel instanceof ClientSubLevel clientSubLevel) {
38+
pose = clientSubLevel.renderPose();
39+
} else {
40+
pose = sublevel.logicalPose();
41+
}
42+
}
43+
if (pose != null) {
44+
return new Quaternionf(pose.orientation());
45+
}
46+
return null;
47+
}
48+
1049
}

common/src/main/java/org/modogthedev/superposition/networking/handler/SuperpositionServerPacketHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import net.minecraft.world.item.ItemStack;
1111
import net.minecraft.world.item.component.CustomData;
1212
import net.minecraft.world.phys.Vec3;
13+
import org.modogthedev.superposition.compat.sable.SableCompat;
1314
import org.modogthedev.superposition.item.FilterItem;
1415
import org.modogthedev.superposition.networking.packet.*;
1516
import org.modogthedev.superposition.system.cable.Cable;
@@ -33,7 +34,7 @@ public static void handleBlockEntityModification(BlockEntityModificationC2SPacke
3334
return;
3435
}
3536

36-
double dist = player.position().distanceToSqr(pos.getCenter());
37+
double dist = player.position().distanceToSqr(SableCompat.tryTransform(level,packet.pos().getCenter()));
3738
if (dist > 24) {
3839
return;
3940
}

common/src/main/java/org/modogthedev/superposition/system/cable/Cable.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.jetbrains.annotations.Nullable;
1414
import org.joml.Vector3d;
1515
import org.modogthedev.superposition.blockentity.SignalActorBlockEntity;
16+
import org.modogthedev.superposition.compat.sable.SableCompat;
1617
import org.modogthedev.superposition.core.SuperpositionConstants;
1718
import org.modogthedev.superposition.core.SuperpositionTags;
1819
import org.modogthedev.superposition.system.cable.rope_system.AnchorConstraint;
@@ -237,7 +238,7 @@ public void toBytes(FriendlyByteBuf buf) {
237238
buf.writeVarInt(this.ropeSimulation.getNodeCount());
238239
for (RopeNode point : this.ropeSimulation.getNodes()) {
239240
buf.writeVec3(point.getPosition());
240-
buf.writeVec3(point.getPrevPosition());
241+
// buf.writeVec3(point.getPrevPosition());
241242
AnchorConstraint constraint = point.getAnchor();
242243
buf.writeBoolean(constraint != null);
243244
if (constraint != null) {
@@ -268,7 +269,7 @@ public static Cable fromBytes(UUID id, FriendlyByteBuf buf, Level level, boolean
268269
for (int i = 0; i < size; i++) {
269270
RopeNode newPoint = new RopeNode(buf.readVec3());
270271
ropeSimulation.addNode(newPoint);
271-
newPoint.setPrevPosition(buf.readVec3());
272+
// newPoint.setPrevPosition(buf.readVec3());
272273
if (buf.readBoolean()) {
273274
newPoint.setAnchor(buf.readEnum(Direction.class), buf.readBlockPos());
274275
if (buf.readBoolean()) {
@@ -306,7 +307,7 @@ public void updateFromCable(Cable cable, boolean isHard) {
306307
// ropeSimulation.getNode(i).setPrevPosition(targetPoints.get(i).getPrevPosition());
307308
} else {
308309
// ropeSimulation.getNode(i).setPrevPosition(ropeSimulation.getNode(i).getPosition());
309-
node.setPrevPosition(targetPoints.get(i).getPrevPosition().lerp(node.getPrevPosition(), 0.8f));
310+
node.setPrevPosition(node.getPosition());
310311
node.setPosition(targetPoints.get(i).getPosition().lerp(node.getPosition(), 0.8f));
311312
}
312313
AnchorConstraint newAnchor = targetPoints.get(i).getAnchor();
@@ -415,8 +416,9 @@ public void setStretchGrace(int stretchGrace) {
415416
this.stretchGrace = stretchGrace;
416417
}
417418

418-
public static Vec3 getAnchoredPoint(BlockPos pos, Direction face) {
419-
return pos.getCenter().add(pos.getCenter().subtract(pos.relative(face).getCenter()).scale(-0.45));
419+
public static Vec3 getAnchoredPoint(Level level,BlockPos pos, Direction face) {
420+
Vec3 center = SableCompat.tryTransform(level, pos.getCenter());
421+
return center.add(center.subtract(pos.relative(face).getCenter()).scale(-0.45));
420422
}
421423

422424
public boolean isSleeping() {

0 commit comments

Comments
 (0)