Skip to content

Commit 8dd6e27

Browse files
committed
Add local position provider
1 parent 7e3753f commit 8dd6e27

2 files changed

Lines changed: 61 additions & 0 deletions

File tree

src/main/java/errorcraft/entitymodifiers/world/position/provider/PositionProviderTypes.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package errorcraft.entitymodifiers.world.position.provider;
22

33
import errorcraft.entitymodifiers.mixin.registry.RegistryAccessor;
4+
import errorcraft.entitymodifiers.world.position.provider.providers.LocalPositionProvider;
45
import errorcraft.entitymodifiers.world.position.provider.providers.WorldPositionProvider;
56
import net.minecraft.util.Identifier;
67
import net.minecraft.util.JsonSerializing;
@@ -12,6 +13,7 @@ public class PositionProviderTypes {
1213
public static final Registry<PositionProviderType> POSITION_PROVIDER_TYPE = RegistryAccessor.create(POSITION_PROVIDER_TYPE_KEY, registry -> PositionProviderTypes.WORLD);
1314

1415
public static final PositionProviderType WORLD = register("world", new WorldPositionProvider.Serialiser());
16+
public static final PositionProviderType LOCAL = register("local", new LocalPositionProvider.Serialiser());
1517

1618
public static Object createGsonAdapter() {
1719
return JsonSerializing.createSerializerBuilder(POSITION_PROVIDER_TYPE, "type", "type", PositionProvider::getType).build();
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package errorcraft.entitymodifiers.world.position.provider.providers;
2+
3+
import com.google.gson.JsonDeserializationContext;
4+
import com.google.gson.JsonObject;
5+
import com.google.gson.JsonSerializationContext;
6+
import errorcraft.entitymodifiers.world.position.provider.PositionProvider;
7+
import errorcraft.entitymodifiers.world.position.provider.PositionProviderType;
8+
import errorcraft.entitymodifiers.world.position.provider.PositionProviderTypes;
9+
import net.minecraft.command.argument.LookingPosArgument;
10+
import net.minecraft.loot.context.LootContext;
11+
import net.minecraft.loot.provider.number.LootNumberProvider;
12+
import net.minecraft.server.command.ServerCommandSource;
13+
import net.minecraft.util.JsonHelper;
14+
import net.minecraft.util.math.Vec2f;
15+
import net.minecraft.util.math.Vec3d;
16+
17+
public class LocalPositionProvider implements PositionProvider {
18+
private final LootNumberProvider left;
19+
private final LootNumberProvider up;
20+
private final LootNumberProvider forwards;
21+
22+
public LocalPositionProvider(LootNumberProvider left, LootNumberProvider up, LootNumberProvider forwards) {
23+
this.left = left;
24+
this.up = up;
25+
this.forwards = forwards;
26+
}
27+
28+
@Override
29+
public PositionProviderType getType() {
30+
return PositionProviderTypes.LOCAL;
31+
}
32+
33+
@Override
34+
public Vec3d getPosition(Vec3d currentPosition, Vec2f rotation, LootContext lootContext) {
35+
double leftOffset = this.left.nextFloat(lootContext);
36+
double upOffset = this.up.nextFloat(lootContext);
37+
double forwardsOffset = this.forwards.nextFloat(lootContext);
38+
LookingPosArgument argument = new LookingPosArgument(leftOffset, upOffset, forwardsOffset);
39+
ServerCommandSource commandSource = new ServerCommandSource(null, currentPosition, rotation, null, 0, null, null, null, null);
40+
return argument.toAbsolutePos(commandSource);
41+
}
42+
43+
public static class Serialiser implements PositionProvider.Serialiser<LocalPositionProvider> {
44+
@Override
45+
public void toJson(JsonObject json, LocalPositionProvider object, JsonSerializationContext context) {
46+
json.add("left", context.serialize(object.left));
47+
json.add("up", context.serialize(object.up));
48+
json.add("forwards", context.serialize(object.forwards));
49+
}
50+
51+
@Override
52+
public LocalPositionProvider fromJson(JsonObject json, JsonDeserializationContext context) {
53+
LootNumberProvider left = JsonHelper.deserialize(json, "left", context, LootNumberProvider.class);
54+
LootNumberProvider up = JsonHelper.deserialize(json, "up", context, LootNumberProvider.class);
55+
LootNumberProvider forwards = JsonHelper.deserialize(json, "forwards", context, LootNumberProvider.class);
56+
return new LocalPositionProvider(left, up, forwards);
57+
}
58+
}
59+
}

0 commit comments

Comments
 (0)