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<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<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<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);
|
Modifier fromTag(CompoundTag tag);
|
||||||
|
|
||||||
CompoundTag toTag(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.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.BiPredicate;
|
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",
|
"type": "dimdoors:rift_data",
|
||||||
"ids": [1,2,3,4,5,6,7],
|
"ids": [4],
|
||||||
"rift_data": "rift_data/public_entrance"
|
"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",
|
"offset_x": "1",
|
||||||
|
|
Loading…
Reference in a new issue