Added RelativeReferenceModifier
This commit is contained in:
parent
d4e103c315
commit
a0d5c239e0
4 changed files with 84 additions and 1 deletions
|
@ -47,6 +47,7 @@ public interface Modifier {
|
|||
ModifierType<DimensionalDoorModifier> DIMENSIONAL_DOOR_MODIFIER_TYPE = register(new Identifier("dimdoors", DimensionalDoorModifier.KEY), DimensionalDoorModifier::new);
|
||||
ModifierType<PocketEntranceModifier> PUBLIC_MODIFIER_TYPE = register(new Identifier("dimdoors", PocketEntranceModifier.KEY), PocketEntranceModifier::new);
|
||||
ModifierType<RiftDataModifier> RIFT_DATA_MODIFIER_TYPE = register(new Identifier("dimdoors", RiftDataModifier.KEY), RiftDataModifier::new);
|
||||
ModifierType<RelativeReferenceModifier> RELATIVE_REFERENCE_MODIFIER_TYPE = register(new Identifier("dimdoors", RelativeReferenceModifier.KEY), RelativeReferenceModifier::new);
|
||||
Modifier fromTag(CompoundTag tag);
|
||||
|
||||
CompoundTag toTag(CompoundTag tag);
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package org.dimdev.dimdoors.pockets.modifier;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
|
||||
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
||||
import org.dimdev.dimdoors.rift.targets.LocalReference;
|
||||
import org.dimdev.dimdoors.rift.targets.RiftReference;
|
||||
import org.dimdev.dimdoors.util.Location;
|
||||
import org.dimdev.dimdoors.util.PocketGenerationParameters;
|
||||
|
||||
public class RelativeReferenceModifier implements Modifier {
|
||||
public static final String KEY = "relative";
|
||||
|
||||
private int point_a, point_b;
|
||||
|
||||
@Override
|
||||
public Modifier fromTag(CompoundTag tag) {
|
||||
point_a = tag.getInt("point_a");
|
||||
point_b = tag.getInt("point_b");
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompoundTag toTag(CompoundTag tag) {
|
||||
Modifier.super.toTag(tag);
|
||||
tag.putInt("point_a", point_a);
|
||||
tag.putInt("point_b", point_b);
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModifierType<? extends Modifier> getType() {
|
||||
return ModifierType.RELATIVE_REFERENCE_MODIFIER_TYPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getKey() {
|
||||
return KEY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(PocketGenerationParameters parameters, RiftManager manager) {
|
||||
Optional<Location> riftA = manager.get(point_a).map(rift -> new Location((ServerWorld) rift.getWorld(), rift.getPos()));
|
||||
Optional<Location> riftB = manager.get(point_b).map(rift -> new Location((ServerWorld) rift.getWorld(), rift.getPos()));
|
||||
|
||||
if(riftA.isPresent() && riftB.isPresent()) {
|
||||
RiftReference link1 = LocalReference.tryMakeRelative(riftA.get(), riftB.get());
|
||||
RiftReference link2 = LocalReference.tryMakeRelative(riftB.get(), riftA.get());
|
||||
|
||||
manager.consume(point_a, rift -> addLink(rift, link1));
|
||||
manager.consume(point_b, rift -> addLink(rift, link2));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean addLink(RiftBlockEntity rift, RiftReference link) {
|
||||
rift.setDestination(link);
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@ package org.dimdev.dimdoors.pockets.modifier;
|
|||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiPredicate;
|
||||
|
@ -75,4 +76,8 @@ public class RiftManager {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Optional<RiftBlockEntity> get(int id) {
|
||||
return Optional.ofNullable(map.get(id));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,8 +18,23 @@
|
|||
},
|
||||
{
|
||||
"type": "dimdoors:rift_data",
|
||||
"ids": [1,2,3,4,5,6,7],
|
||||
"ids": [4],
|
||||
"rift_data": "rift_data/public_entrance"
|
||||
},
|
||||
{
|
||||
"type": "dimdoors:relative",
|
||||
"point_a": 1,
|
||||
"point_b": 7
|
||||
},
|
||||
{
|
||||
"type": "dimdoors:relative",
|
||||
"point_a": 2,
|
||||
"point_b": 6
|
||||
},
|
||||
{
|
||||
"type": "dimdoors:relative",
|
||||
"point_a": 3,
|
||||
"point_b": 5
|
||||
}
|
||||
],
|
||||
"offset_x": "1",
|
||||
|
|
Loading…
Reference in a new issue