Skip to content

Commit a0d5c23

Browse files
committed
Added RelativeReferenceModifier
1 parent d4e103c commit a0d5c23

4 files changed

Lines changed: 84 additions & 1 deletion

File tree

src/main/java/org/dimdev/dimdoors/pockets/modifier/Modifier.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ interface ModifierType<T extends Modifier> {
4747
ModifierType<DimensionalDoorModifier> DIMENSIONAL_DOOR_MODIFIER_TYPE = register(new Identifier("dimdoors", DimensionalDoorModifier.KEY), DimensionalDoorModifier::new);
4848
ModifierType<PocketEntranceModifier> PUBLIC_MODIFIER_TYPE = register(new Identifier("dimdoors", PocketEntranceModifier.KEY), PocketEntranceModifier::new);
4949
ModifierType<RiftDataModifier> RIFT_DATA_MODIFIER_TYPE = register(new Identifier("dimdoors", RiftDataModifier.KEY), RiftDataModifier::new);
50+
ModifierType<RelativeReferenceModifier> RELATIVE_REFERENCE_MODIFIER_TYPE = register(new Identifier("dimdoors", RelativeReferenceModifier.KEY), RelativeReferenceModifier::new);
5051
Modifier fromTag(CompoundTag tag);
5152

5253
CompoundTag toTag(CompoundTag tag);
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.dimdev.dimdoors.pockets.modifier;
2+
3+
import java.util.Optional;
4+
5+
import net.minecraft.nbt.CompoundTag;
6+
import net.minecraft.server.world.ServerWorld;
7+
8+
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
9+
import org.dimdev.dimdoors.rift.targets.LocalReference;
10+
import org.dimdev.dimdoors.rift.targets.RiftReference;
11+
import org.dimdev.dimdoors.util.Location;
12+
import org.dimdev.dimdoors.util.PocketGenerationParameters;
13+
14+
public class RelativeReferenceModifier implements Modifier {
15+
public static final String KEY = "relative";
16+
17+
private int point_a, point_b;
18+
19+
@Override
20+
public Modifier fromTag(CompoundTag tag) {
21+
point_a = tag.getInt("point_a");
22+
point_b = tag.getInt("point_b");
23+
return this;
24+
}
25+
26+
@Override
27+
public CompoundTag toTag(CompoundTag tag) {
28+
Modifier.super.toTag(tag);
29+
tag.putInt("point_a", point_a);
30+
tag.putInt("point_b", point_b);
31+
return tag;
32+
}
33+
34+
@Override
35+
public ModifierType<? extends Modifier> getType() {
36+
return ModifierType.RELATIVE_REFERENCE_MODIFIER_TYPE;
37+
}
38+
39+
@Override
40+
public String getKey() {
41+
return KEY;
42+
}
43+
44+
@Override
45+
public void apply(PocketGenerationParameters parameters, RiftManager manager) {
46+
Optional<Location> riftA = manager.get(point_a).map(rift -> new Location((ServerWorld) rift.getWorld(), rift.getPos()));
47+
Optional<Location> riftB = manager.get(point_b).map(rift -> new Location((ServerWorld) rift.getWorld(), rift.getPos()));
48+
49+
if(riftA.isPresent() && riftB.isPresent()) {
50+
RiftReference link1 = LocalReference.tryMakeRelative(riftA.get(), riftB.get());
51+
RiftReference link2 = LocalReference.tryMakeRelative(riftB.get(), riftA.get());
52+
53+
manager.consume(point_a, rift -> addLink(rift, link1));
54+
manager.consume(point_b, rift -> addLink(rift, link2));
55+
}
56+
}
57+
58+
private boolean addLink(RiftBlockEntity rift, RiftReference link) {
59+
rift.setDestination(link);
60+
return true;
61+
}
62+
}

src/main/java/org/dimdev/dimdoors/pockets/modifier/RiftManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.HashSet;
44
import java.util.Map;
5+
import java.util.Optional;
56
import java.util.Set;
67
import java.util.function.BiConsumer;
78
import java.util.function.BiPredicate;
@@ -75,4 +76,8 @@ public void foreachConsume(BiPredicate<Integer, RiftBlockEntity> consumer) {
7576
}
7677
}
7778
}
79+
80+
public Optional<RiftBlockEntity> get(int id) {
81+
return Optional.ofNullable(map.get(id));
82+
}
7883
}

src/main/resources/data/dimdoors/pockets/generators/custom/purpur_hallway.json

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,23 @@
1818
},
1919
{
2020
"type": "dimdoors:rift_data",
21-
"ids": [1,2,3,4,5,6,7],
21+
"ids": [4],
2222
"rift_data": "rift_data/public_entrance"
23+
},
24+
{
25+
"type": "dimdoors:relative",
26+
"point_a": 1,
27+
"point_b": 7
28+
},
29+
{
30+
"type": "dimdoors:relative",
31+
"point_a": 2,
32+
"point_b": 6
33+
},
34+
{
35+
"type": "dimdoors:relative",
36+
"point_a": 3,
37+
"point_b": 5
2338
}
2439
],
2540
"offset_x": "1",

0 commit comments

Comments
 (0)