Skip to content

Commit e235d3c

Browse files
committed
Update to 1.21.8, minor cleanup
1 parent b64a4ab commit e235d3c

9 files changed

Lines changed: 119 additions & 62 deletions

File tree

build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
22

33
plugins {
44
java
5-
id("com.github.johnrengelman.shadow") version "8.1.1"
5+
id("com.gradleup.shadow") version "9.0.0-rc1"
66
}
77

88
group = "dev.emortal"
@@ -25,7 +25,7 @@ dependencies {
2525

2626
implementation("io.github.electrostat-lab:snaploader:1.1.1-stable")
2727

28-
implementation("net.minestom:minestom-snapshots:1_21_5-1c8431a9ec")
28+
implementation("net.minestom:minestom:2025.07.17-1.21.8")
2929

3030
implementation("ch.qos.logback:logback-classic:1.5.18")
3131
}
@@ -44,4 +44,4 @@ tasks {
4444
build {
4545
dependsOn(shadowJar)
4646
}
47-
}
47+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Sun Oct 01 21:33:41 BST 2023
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
4-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
4+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists

src/main/java/dev/emortal/Main.java

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
package dev.emortal;
22

3-
import com.jme3.bullet.PhysicsSpace;
4-
import com.jme3.bullet.collision.PhysicsRayTestResult;
53
import com.jme3.bullet.collision.shapes.BoxCollisionShape;
64
import com.jme3.bullet.collision.shapes.CollisionShape;
75
import com.jme3.bullet.objects.PhysicsBody;
86
import com.jme3.bullet.objects.PhysicsRigidBody;
97
import com.jme3.math.Vector3f;
108
import dev.emortal.commands.*;
119
import dev.emortal.objects.BlockRigidBody;
12-
import dev.emortal.objects.ChainPhysics;
1310
import dev.emortal.objects.LanternPhysics;
1411
import dev.emortal.objects.MinecraftPhysicsObject;
1512
import dev.emortal.tools.*;
@@ -49,7 +46,6 @@
4946
import net.minestom.server.sound.SoundEvent;
5047
import net.minestom.server.timer.TaskSchedule;
5148
import net.minestom.server.world.DimensionType;
52-
import org.jetbrains.annotations.NotNull;
5349
import org.slf4j.Logger;
5450
import org.slf4j.LoggerFactory;
5551

@@ -66,10 +62,6 @@ public class Main {
6662

6763
private static final Set<Point> BLOCKS_IN_SPHERE = SphereUtil.getBlocksInSphere(5);
6864

69-
70-
71-
public static boolean paused = false;
72-
7365
public static void main(String[] args) throws Exception {
7466
LibraryInfo info = new LibraryInfo(
7567
new DirectoryPath("linux/x86-64/com/github/stephengold"),
@@ -88,10 +80,13 @@ public static void main(String[] args) throws Exception {
8880

8981
System.setProperty("minestom.tps", "60");
9082

83+
9184
MinecraftServer server = MinecraftServer.init();
9285
MojangAuth.init();
9386

9487

88+
89+
9590
DimensionType fullbrightDimension = DimensionType.builder().ambientLight(1f).build();
9691
var fullbright = MinecraftServer.getDimensionTypeRegistry().register(Key.key("fullbright"), fullbrightDimension);
9792

@@ -124,8 +119,8 @@ public static void main(String[] args) throws Exception {
124119
e.getPlayer().getInventory().setItemStack(6, new PlayerSpawnerTool(e.getPlayer(), physicsHandler).getItem());
125120
e.getPlayer().getInventory().setItemStack(5, new GrabberTool(e.getPlayer(), physicsHandler).getItem());
126121
e.getPlayer().getInventory().setItemStack(4, new WeldTool(e.getPlayer(), physicsHandler).getItem());
122+
e.getPlayer().getInventory().setItemStack(3, new ChainTool(e.getPlayer(), physicsHandler).getItem());
127123

128-
e.getPlayer().getInventory().setItemStack(3, ItemStack.of(Material.CHAIN));
129124
e.getPlayer().getInventory().setItemStack(2, ItemStack.of(Material.TNT));
130125
e.getPlayer().getInventory().setItemStack(1, ItemStack.of(Material.STONE));
131126

@@ -146,18 +141,7 @@ public static void main(String[] args) throws Exception {
146141
e.getPlayer().setRespawnPoint(new Pos(0, 20, 0));
147142
});
148143

149-
instance.scheduler().buildTask(new Runnable() {
150-
long lastRan = System.nanoTime();
151-
@Override
152-
public void run() {
153-
long diff = System.nanoTime() - lastRan;
154-
float deltaTime = diff / 1_000_000_000f;
155-
156-
lastRan = System.nanoTime();
157-
if (paused) return;
158-
physicsHandler.update(deltaTime);
159-
}
160-
}).repeat(TaskSchedule.tick(1)).schedule();
144+
physicsHandler.start();
161145

162146
global.addListener(ItemDropEvent.class, e -> {
163147
e.setCancelled(true);
@@ -201,18 +185,6 @@ public void run() {
201185
lantern.setInstance();
202186
}
203187

204-
if (e.getBlock().compare(Block.CHAIN)) {
205-
e.setCancelled(true);
206-
207-
MinecraftPhysicsObject first = new ChainPhysics(physicsHandler, null, new Vec(0.1f, 0.5f, 0.1f), 1, new Vector3f(e.getBlockPosition().blockX() + 0.5f, e.getBlockPosition().blockY() + 0.5f, e.getBlockPosition().blockZ() + 0.5f));
208-
MinecraftPhysicsObject lastLink = first;
209-
for (int links = 0; links < ChainLengthCommand.CHAIN_LENGTH; links++) {
210-
lastLink = new ChainPhysics(physicsHandler, (PhysicsRigidBody) lastLink.getCollisionObject(), new Vec(0.1f, 0.5f, 0.1f), 1, new Vector3f(e.getBlockPosition().blockX() + 0.5f, e.getBlockPosition().blockY() + 0.5f + (ChainLengthCommand.CHAIN_LENGTH-links) * 1.1f, e.getBlockPosition().blockZ() + 0.5f));
211-
lastLink.setInstance();
212-
}
213-
// Main.paused = true;
214-
}
215-
216188
if (e.getBlock().compare(Block.TNT)) {
217189
e.setCancelled(true);
218190

@@ -236,7 +208,7 @@ public void run() {
236208

237209
PhysicsRigidBody cubeRigidBody = (PhysicsRigidBody) cube.getCollisionObject();
238210

239-
Vec velocity = Vec.fromPoint(cube.getEntity().getPosition().sub(blockPos.add(0.5))).normalize().mul(4, 8, 4).mul(rand.nextDouble(1.2, 2)).mul(TntStrengthCommand.TNT_STRENGTH);
211+
Vec velocity = cube.getEntity().getPosition().sub(blockPos.add(0.5)).asVec().normalize().mul(4, 8, 4).mul(rand.nextDouble(1.2, 2)).mul(TntStrengthCommand.TNT_STRENGTH);
240212
cube.getCollisionObject().activate(true);
241213

242214
Vector3f linearVelocity = new Vector3f();
@@ -252,7 +224,7 @@ public void run() {
252224
cube.setInstance();
253225
PhysicsRigidBody cubeRigidBody = (PhysicsRigidBody) cube.getCollisionObject();
254226

255-
Vec velocity = Vec.fromPoint(nearbyBlock.position().sub(blockPos.add(0.5))).normalize().mul(4, 8, 4).mul(rand.nextDouble(1.2, 2)).mul(TntStrengthCommand.TNT_STRENGTH);
227+
Vec velocity = nearbyBlock.position().sub(blockPos.add(0.5)).asVec().normalize().mul(4, 8, 4).mul(rand.nextDouble(1.2, 2)).mul(TntStrengthCommand.TNT_STRENGTH);
256228
cube.getCollisionObject().activate(true);
257229
Vector3f linearVelocity = new Vector3f();
258230
cubeRigidBody.getLinearVelocity(linearVelocity);
@@ -297,11 +269,4 @@ public void run() {
297269
server.start("0.0.0.0", 25565);
298270
}
299271

300-
public static List<PhysicsRayTestResult> raycastEntity(PhysicsSpace physicsSpace, @NotNull Point startPoint, @NotNull Point direction, double maxDistance) {
301-
Point endPoint = startPoint.add(Vec.fromPoint(direction).normalize().mul(maxDistance));
302-
List<PhysicsRayTestResult> results = physicsSpace.rayTest(new Vector3f((float) startPoint.x(), (float) startPoint.y(), (float) startPoint.z()), new Vector3f((float) endPoint.x(), (float) endPoint.y(), (float) endPoint.z()));
303-
304-
return results;
305-
}
306-
307-
}
272+
}

src/main/java/dev/emortal/MinecraftPhysics.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@
22

33
import com.jme3.bullet.NativePhysicsObject;
44
import com.jme3.bullet.PhysicsSpace;
5+
import com.jme3.bullet.collision.PhysicsRayTestResult;
56
import com.jme3.bullet.collision.shapes.CollisionShape;
67
import com.jme3.bullet.collision.shapes.PlaneCollisionShape;
78
import com.jme3.bullet.objects.PhysicsRigidBody;
89
import com.jme3.math.Plane;
910
import com.jme3.math.Vector3f;
1011
import dev.emortal.objects.MinecraftPhysicsObject;
12+
import net.minestom.server.coordinate.Point;
1113
import net.minestom.server.instance.Instance;
1214
import net.minestom.server.tag.Tag;
15+
import net.minestom.server.timer.TaskSchedule;
1316
import org.jetbrains.annotations.NotNull;
1417
import org.jetbrains.annotations.Nullable;
1518
import org.slf4j.Logger;
@@ -24,6 +27,8 @@ public class MinecraftPhysics {
2427

2528
private static final Logger LOGGER = LoggerFactory.getLogger(MinecraftPhysics.class);
2629

30+
private boolean paused = false;
31+
2732
private @NotNull PhysicsSpace physicsSpace;
2833
private @NotNull PhysicsRigidBody floor;
2934

@@ -52,7 +57,22 @@ public MinecraftPhysics(Instance instance) {
5257
});
5358
}
5459

55-
public void update(float delta) {
60+
public void start() {
61+
instance.scheduler().buildTask(new Runnable() {
62+
long lastRan = System.nanoTime();
63+
@Override
64+
public void run() {
65+
long diff = System.nanoTime() - lastRan;
66+
float deltaTime = diff / 1_000_000_000f;
67+
68+
lastRan = System.nanoTime();
69+
if (paused) return;
70+
update(deltaTime);
71+
}
72+
}).repeat(TaskSchedule.tick(1)).schedule();
73+
}
74+
75+
private void update(float delta) {
5676
if (physicsSpace == null) return;
5777

5878
physicsSpace.update(delta);
@@ -81,6 +101,21 @@ public void removeObject(MinecraftPhysicsObject object) {
81101
return objectMap.get(physicsObject);
82102
}
83103

104+
public List<PhysicsRayTestResult> raycastEntity(@NotNull Point startPoint, @NotNull Point direction, double maxDistance) {
105+
Point endPoint = startPoint.add(direction.asVec().normalize().mul(maxDistance));
106+
List<PhysicsRayTestResult> results = physicsSpace.rayTest(new Vector3f((float) startPoint.x(), (float) startPoint.y(), (float) startPoint.z()), new Vector3f((float) endPoint.x(), (float) endPoint.y(), (float) endPoint.z()));
107+
108+
return results;
109+
}
110+
111+
public boolean isPaused() {
112+
return paused;
113+
}
114+
115+
public void setPaused(boolean paused) {
116+
this.paused = paused;
117+
}
118+
84119
public Instance getInstance() {
85120
return instance;
86121
}

src/main/java/dev/emortal/objects/RagdollPhysics.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import java.util.List;
2626

2727
import static dev.emortal.commands.PlayerSizeCommand.PLAYER_SIZE;
28-
import static dev.emortal.utils.CoordinateUtils.toVec;
29-
import static dev.emortal.utils.CoordinateUtils.toVector3;
3028

3129
public class RagdollPhysics extends BlockRigidBody {
3230

@@ -71,7 +69,7 @@ public RagdollPhysics(MinecraftPhysics mcPhysics, @NotNull Player spawner, @Null
7169
default -> throw new IllegalStateException("Unexpected value: " + part);
7270
};
7371

74-
New6Dof joint = new New6Dof(torso, rigidBody, toVector3(toVec(firstThing).mul(PLAYER_SIZE)), toVector3(toVec(secondThing).mul(PLAYER_SIZE)), Matrix3f.IDENTITY, Matrix3f.IDENTITY, RotationOrder.XYZ);
72+
New6Dof joint = new New6Dof(torso, rigidBody, firstThing.mult((float) PLAYER_SIZE), secondThing.mult((float) PLAYER_SIZE), Matrix3f.IDENTITY, Matrix3f.IDENTITY, RotationOrder.XYZ);
7573
joint.setBreakingImpulseThreshold(60);
7674
mcPhysics.getPhysicsSpace().add(joint);
7775
addRelated(joint);
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package dev.emortal.tools;
2+
3+
import com.jme3.bullet.objects.PhysicsRigidBody;
4+
import dev.emortal.MinecraftPhysics;
5+
import dev.emortal.objects.ChainPhysics;
6+
import dev.emortal.objects.MinecraftPhysicsObject;
7+
import net.kyori.adventure.sound.Sound;
8+
import net.kyori.adventure.text.Component;
9+
import net.kyori.adventure.text.format.NamedTextColor;
10+
import net.kyori.adventure.text.format.TextDecoration;
11+
import net.minestom.server.coordinate.Vec;
12+
import net.minestom.server.entity.Player;
13+
import net.minestom.server.item.ItemStack;
14+
import net.minestom.server.item.Material;
15+
import net.minestom.server.sound.SoundEvent;
16+
import org.jetbrains.annotations.NotNull;
17+
18+
import static dev.emortal.utils.CoordinateUtils.toVector3;
19+
20+
public class ChainTool extends Tool {
21+
22+
private final @NotNull Player player;
23+
private final @NotNull MinecraftPhysics physicsHandler;
24+
public ChainTool(@NotNull Player player, @NotNull MinecraftPhysics physicsHandler) {
25+
super(player, "chain");
26+
this.player = player;
27+
this.physicsHandler = physicsHandler;
28+
}
29+
30+
31+
@Override
32+
void onSwitchHands() {
33+
34+
}
35+
36+
@Override
37+
public void onLeftClick() {
38+
39+
}
40+
41+
@Override
42+
public void onRightClick() {
43+
player.playSound(Sound.sound(SoundEvent.BLOCK_CHAIN_PLACE, Sound.Source.MASTER, 1f, 1f), Sound.Emitter.self());
44+
45+
double holdDistance = 4;
46+
Vec spawnPos = player.getPosition().add(0, player.getEyeHeight(), 0).add(player.getPosition().direction().mul(holdDistance)).asVec();
47+
48+
MinecraftPhysicsObject lastLink = null;
49+
for (int links = 0; links < 10; links++) {
50+
PhysicsRigidBody parent = null;
51+
if (lastLink != null) parent = (PhysicsRigidBody) lastLink.getCollisionObject();
52+
lastLink = new ChainPhysics(physicsHandler, parent, new Vec(0.1f, 0.5f, 0.1f), 1, toVector3(spawnPos.add(0, (10 - links) * 1.04, 0)));
53+
lastLink.setInstance();
54+
}
55+
}
56+
57+
@Override
58+
public ItemStack getItem() {
59+
return ItemStack.builder(Material.DIAMOND_BLOCK)
60+
.customName(Component.text("Chain Spawner", NamedTextColor.LIGHT_PURPLE).decoration(TextDecoration.ITALIC, false))
61+
.set(Tool.TOOL_NAME_TAG, "chain")
62+
.build();
63+
}
64+
}

src/main/java/dev/emortal/tools/DeleteTool.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
import java.util.List;
1818

19-
import static dev.emortal.Main.raycastEntity;
20-
2119
public class DeleteTool extends Tool {
2220

2321
private final @NotNull Player player;
@@ -41,7 +39,7 @@ public void onLeftClick() {
4139

4240
@Override
4341
public void onRightClick() {
44-
List<PhysicsRayTestResult> results = raycastEntity(physicsHandler.getPhysicsSpace(), player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
42+
List<PhysicsRayTestResult> results = physicsHandler.raycastEntity(player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
4543
if (results.isEmpty()) return;
4644

4745
PhysicsCollisionObject obj = results.getFirst().getCollisionObject();

src/main/java/dev/emortal/tools/GrabberTool.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.List;
3232
import java.util.Map;
3333

34-
import static dev.emortal.Main.raycastEntity;
3534
import static dev.emortal.utils.CoordinateUtils.toVec;
3635
import static dev.emortal.utils.CoordinateUtils.toVector3;
3736

@@ -117,7 +116,7 @@ public void onRightClick() {
117116
return;
118117
}
119118

120-
List<PhysicsRayTestResult> results = raycastEntity(physicsHandler.getPhysicsSpace(), player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
119+
List<PhysicsRayTestResult> results = physicsHandler.raycastEntity(player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
121120
if (results.isEmpty()) return;
122121

123122
PhysicsCollisionObject obj = results.getFirst().getCollisionObject();
@@ -151,8 +150,8 @@ public void onRightClick() {
151150
Vector3f physicsVec = new Vector3f();
152151
obj.getPhysicsLocation(physicsVec);
153152

154-
Vec wantedPos = Vec.fromPoint(player.getPosition().add(0, player.getEyeHeight(), 0).add(player.getPosition().direction().mul(holdingDistance)));
155-
Vec diff = Vec.fromPoint(wantedPos.sub(toVec(physicsVec)));
153+
Vec wantedPos = player.getPosition().add(0, player.getEyeHeight(), 0).add(player.getPosition().direction().mul(holdingDistance)).asVec();
154+
Vec diff = wantedPos.sub(toVec(physicsVec)).asVec();
156155

157156
rigidBody.setLinearVelocity(toVector3(diff.mul(grabberForce)));
158157
}).repeat(TaskSchedule.tick(1)).schedule();

src/main/java/dev/emortal/tools/WeldTool.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020

2121
import java.util.List;
2222

23-
import static dev.emortal.Main.raycastEntity;
24-
2523
public class WeldTool extends Tool {
2624

2725
private @Nullable PhysicsRigidBody firstObject = null;
@@ -49,7 +47,7 @@ public void onLeftClick() {
4947
player.sendMessage("Deselected first object");
5048
}
5149

52-
List<PhysicsRayTestResult> results = raycastEntity(physicsHandler.getPhysicsSpace(), player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
50+
List<PhysicsRayTestResult> results = physicsHandler.raycastEntity(player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
5351
if (results.isEmpty()) return;
5452

5553
PhysicsCollisionObject obj = results.getFirst().getCollisionObject();
@@ -63,7 +61,7 @@ public void onLeftClick() {
6361

6462
@Override
6563
public void onRightClick() {
66-
List<PhysicsRayTestResult> results = raycastEntity(physicsHandler.getPhysicsSpace(), player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
64+
List<PhysicsRayTestResult> results = physicsHandler.raycastEntity(player.getPosition().add(0, player.getEyeHeight(), 0), player.getPosition().direction(), 1000);
6765
if (results.isEmpty()) return;
6866

6967
PhysicsCollisionObject obj = results.getFirst().getCollisionObject();

0 commit comments

Comments
 (0)