Skip to content

Commit 51b1c8e

Browse files
committed
Add SetPositionEntityModifier
1 parent 69a981b commit 51b1c8e

2 files changed

Lines changed: 67 additions & 0 deletions

File tree

src/main/java/errorcraft/entitymodifiers/entity/modifier/EntityModifierTypes.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class EntityModifierTypes {
1919
public static final EntityModifierType SET_CUSTOM_NAME = register("set_custom_name", new SetCustomNameEntityModifier.Serialiser());
2020
public static final EntityModifierType SET_ABSORPTION = register("set_absorption", new SetAbsorptionEntityModifier.Serialiser());
2121
public static final EntityModifierType SET_SATURATION = register("set_saturation", new SetSaturationEntityModifier.Serialiser());
22+
public static final EntityModifierType SET_POSITION = register("set_position", new SetPositionEntityModifier.Serialiser());
2223

2324
public static Object createGsonAdapter() {
2425
return JsonSerializing.createSerializerBuilder(ENTITY_MODIFIER_TYPE, "function", "function", EntityModifier::getType).build();
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package errorcraft.entitymodifiers.entity.modifier.modifiers;
2+
3+
import com.google.gson.JsonDeserializationContext;
4+
import com.google.gson.JsonObject;
5+
import com.google.gson.JsonSerializationContext;
6+
import errorcraft.entitymodifiers.entity.modifier.EntityModifier;
7+
import errorcraft.entitymodifiers.entity.modifier.EntityModifierType;
8+
import errorcraft.entitymodifiers.entity.modifier.EntityModifierTypes;
9+
import net.minecraft.entity.Entity;
10+
import net.minecraft.loot.context.LootContext;
11+
import net.minecraft.loot.provider.number.LootNumberProvider;
12+
import net.minecraft.server.network.ServerPlayerEntity;
13+
import net.minecraft.util.JsonHelper;
14+
15+
public class SetPositionEntityModifier implements EntityModifier {
16+
private final LootNumberProvider x;
17+
private final LootNumberProvider y;
18+
private final LootNumberProvider z;
19+
20+
public SetPositionEntityModifier(LootNumberProvider x, LootNumberProvider y, LootNumberProvider z) {
21+
this.x = x;
22+
this.y = y;
23+
this.z = z;
24+
}
25+
26+
@Override
27+
public EntityModifierType getType() {
28+
return EntityModifierTypes.SET_POSITION;
29+
}
30+
31+
@Override
32+
public Entity apply(Entity entity, LootContext lootContext) {
33+
double newX = this.x.nextFloat(lootContext);
34+
double newY = this.y.nextFloat(lootContext);
35+
double newZ = this.z.nextFloat(lootContext);
36+
entity.setPosition(newX, newY, newZ);
37+
if (entity instanceof ServerPlayerEntity player) {
38+
setPlayerPosition(player, newX, newY, newZ);
39+
}
40+
return entity;
41+
}
42+
43+
private static void setPlayerPosition(ServerPlayerEntity player, double x, double y, double z) {
44+
if (player.isSleeping()) {
45+
player.wakeUp(true, true);
46+
}
47+
player.requestTeleportAndDismount(x, y, z);
48+
}
49+
50+
public static class Serialiser implements EntityModifier.Serialiser<SetPositionEntityModifier> {
51+
@Override
52+
public void toJson(JsonObject json, SetPositionEntityModifier object, JsonSerializationContext context) {
53+
json.add("x", context.serialize(object.x));
54+
json.add("y", context.serialize(object.y));
55+
json.add("z", context.serialize(object.z));
56+
}
57+
58+
@Override
59+
public SetPositionEntityModifier fromJson(JsonObject json, JsonDeserializationContext context) {
60+
LootNumberProvider x = JsonHelper.deserialize(json, "x", context, LootNumberProvider.class);
61+
LootNumberProvider y = JsonHelper.deserialize(json, "y", context, LootNumberProvider.class);
62+
LootNumberProvider z = JsonHelper.deserialize(json, "z", context, LootNumberProvider.class);
63+
return new SetPositionEntityModifier(x, y, z);
64+
}
65+
}
66+
}

0 commit comments

Comments
 (0)