Pushed First attempt pocket with new system and fixes.
This commit is contained in:
parent
21b860fbee
commit
142eb7ee37
10 changed files with 179 additions and 5 deletions
|
@ -27,6 +27,7 @@ import org.dimdev.dimdoors.util.PocketGenerationParameters;
|
||||||
import org.dimdev.dimdoors.util.Weighted;
|
import org.dimdev.dimdoors.util.Weighted;
|
||||||
import org.dimdev.dimdoors.util.math.Equation;
|
import org.dimdev.dimdoors.util.math.Equation;
|
||||||
import org.dimdev.dimdoors.util.math.Equation.EquationParseException;
|
import org.dimdev.dimdoors.util.math.Equation.EquationParseException;
|
||||||
|
import org.dimdev.dimdoors.world.level.DimensionalRegistry;
|
||||||
import org.dimdev.dimdoors.world.pocket.Pocket;
|
import org.dimdev.dimdoors.world.pocket.Pocket;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -139,7 +140,7 @@ public abstract class PocketGenerator implements Weighted<PocketGenerationParame
|
||||||
return this.weightEquation.apply(parameters.toVariableMap(new HashMap<>()));
|
return this.weightEquation.apply(parameters.toVariableMap(new HashMap<>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void apply(PocketGenerationParameters parameters, RiftManager manager) {
|
public void applyModifiers(PocketGenerationParameters parameters, RiftManager manager) {
|
||||||
for (Modifier modifier : modifierList) {
|
for (Modifier modifier : modifierList) {
|
||||||
modifier.apply(parameters, manager);
|
modifier.apply(parameters, manager);
|
||||||
}
|
}
|
||||||
|
@ -168,6 +169,10 @@ public abstract class PocketGenerator implements Weighted<PocketGenerationParame
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
TemplateUtils.registerRifts(rifts, parameters.getLinkTo(), parameters.getLinkProperties(), pocket);
|
TemplateUtils.registerRifts(rifts, parameters.getLinkTo(), parameters.getLinkProperties(), pocket);
|
||||||
|
|
||||||
|
System.out.println("Printing Bullshit.");
|
||||||
|
DimensionalRegistry.getRiftRegistry().getPocketEntrances(pocket).forEach(System.out::println);
|
||||||
|
|
||||||
pocket.virtualLocation = parameters.getSourceVirtualLocation(); //TODO: this makes very little sense
|
pocket.virtualLocation = parameters.getSourceVirtualLocation(); //TODO: this makes very little sense
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.util.registry.SimpleRegistry;
|
import net.minecraft.util.registry.SimpleRegistry;
|
||||||
|
|
||||||
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
||||||
|
import org.dimdev.dimdoors.block.entity.RiftData;
|
||||||
import org.dimdev.dimdoors.util.PocketGenerationParameters;
|
import org.dimdev.dimdoors.util.PocketGenerationParameters;
|
||||||
import org.dimdev.dimdoors.world.pocket.Pocket;
|
import org.dimdev.dimdoors.world.pocket.Pocket;
|
||||||
|
|
||||||
|
@ -45,7 +46,7 @@ public interface Modifier {
|
||||||
ModifierType<ShellModifier> SHELL_MODIFIER_TYPE = register(new Identifier("dimdoors", ShellModifier.KEY), ShellModifier::new);
|
ModifierType<ShellModifier> SHELL_MODIFIER_TYPE = register(new Identifier("dimdoors", ShellModifier.KEY), ShellModifier::new);
|
||||||
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);
|
||||||
Modifier fromTag(CompoundTag tag);
|
Modifier fromTag(CompoundTag tag);
|
||||||
|
|
||||||
CompoundTag toTag(CompoundTag tag);
|
CompoundTag toTag(CompoundTag tag);
|
||||||
|
|
|
@ -0,0 +1,111 @@
|
||||||
|
package org.dimdev.dimdoors.pockets.modifier;
|
||||||
|
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.nbt.IntTag;
|
||||||
|
import net.minecraft.nbt.ListTag;
|
||||||
|
|
||||||
|
import net.fabricmc.fabric.api.util.NbtType;
|
||||||
|
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
||||||
|
import org.dimdev.dimdoors.block.entity.RiftData;
|
||||||
|
import org.dimdev.dimdoors.pockets.SchematicV2Handler;
|
||||||
|
import org.dimdev.dimdoors.rift.targets.VirtualTarget;
|
||||||
|
import org.dimdev.dimdoors.util.PocketGenerationParameters;
|
||||||
|
import org.dimdev.dimdoors.util.TagEquations;
|
||||||
|
|
||||||
|
public class RiftDataModifier implements Modifier {
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger();
|
||||||
|
public static final String KEY = "rift_data";
|
||||||
|
|
||||||
|
private CompoundTag doorData;
|
||||||
|
private String doorDataReference;
|
||||||
|
private List<Integer> ids;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Modifier fromTag(CompoundTag tag) {
|
||||||
|
if (tag.getType("rift_data") == NbtType.STRING) {
|
||||||
|
doorDataReference = tag.getString("rift_data");
|
||||||
|
doorData = (CompoundTag) SchematicV2Handler.getInstance().readNbtFromJson(doorDataReference);
|
||||||
|
LOGGER.info("Print Door bullshit: " + "\n" + doorData);
|
||||||
|
}
|
||||||
|
else if (tag.getType("rift_data") == NbtType.COMPOUND) doorData = tag.getCompound("rift_data");
|
||||||
|
|
||||||
|
ids = stream(tag.getByteArray("ids")).boxed().collect(Collectors.toList());
|
||||||
|
LOGGER.info("Checking bullshit 2 Electric Bugaloo: " + tag);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IntStream stream(byte[] bytes) {
|
||||||
|
ByteBuffer buffer = ByteBuffer.wrap(bytes);
|
||||||
|
return IntStream.generate(buffer::get).limit(buffer.remaining());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] toByteArray(int[] ints) {
|
||||||
|
byte[] bytes = new byte[ints.length];
|
||||||
|
for (int i = 0; i < ints.length; i++) {
|
||||||
|
bytes[i] = (byte) ints[i];
|
||||||
|
}
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompoundTag toTag(CompoundTag tag) {
|
||||||
|
Modifier.super.toTag(tag);
|
||||||
|
|
||||||
|
if (doorDataReference != null) tag.putString("rift_data", doorDataReference);
|
||||||
|
else if (doorData != null) tag.put("rift_data", doorData);
|
||||||
|
tag.putByteArray("ids", toByteArray(ids.stream().mapToInt(Integer::intValue).toArray()));
|
||||||
|
return tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModifierType<? extends Modifier> getType() {
|
||||||
|
return ModifierType.RIFT_DATA_MODIFIER_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKey() {
|
||||||
|
return KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void apply(PocketGenerationParameters parameters, RiftManager manager) {
|
||||||
|
Map<String, Double> variableMap = manager.getPocket().toVariableMap(new HashMap<>());
|
||||||
|
|
||||||
|
Consumer<RiftBlockEntity> riftBlockEntityConsumer;
|
||||||
|
|
||||||
|
if (doorData == null) {
|
||||||
|
riftBlockEntityConsumer = rift -> rift.setDestination(VirtualTarget.NoneTarget.INSTANCE);
|
||||||
|
} else {
|
||||||
|
CompoundTag solvedDoorData = TagEquations.solveCompoundTagEquations(doorData, variableMap);
|
||||||
|
RiftData data = RiftData.fromTag(solvedDoorData);
|
||||||
|
|
||||||
|
LOGGER.info("Dealing spefific bullshit.");
|
||||||
|
LOGGER.info(RiftData.toTag(data));
|
||||||
|
LOGGER.info(solvedDoorData);
|
||||||
|
riftBlockEntityConsumer = rift -> rift.setData(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
manager.foreachConsume((id, rift) -> {
|
||||||
|
if(ids.contains(id)) {
|
||||||
|
riftBlockEntityConsumer.accept(rift);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,10 @@
|
||||||
package org.dimdev.dimdoors.pockets.modifier;
|
package org.dimdev.dimdoors.pockets.modifier;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.BiPredicate;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
||||||
|
@ -43,8 +46,8 @@ public class RiftManager {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean consume(int id, Function<RiftBlockEntity, Boolean> consumer) {
|
public boolean consume(int id, Predicate<RiftBlockEntity> consumer) {
|
||||||
if (map.containsKey(id) && consumer.apply(map.get(id))) {
|
if (map.containsKey(id) && consumer.test(map.get(id))) {
|
||||||
map.remove(id);
|
map.remove(id);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -62,4 +65,12 @@ public class RiftManager {
|
||||||
public boolean available(int id) { // TODO: remove? method is likely redundant
|
public boolean available(int id) { // TODO: remove? method is likely redundant
|
||||||
return !map.containsKey(id);
|
return !map.containsKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void foreachConsume(BiPredicate<Integer, RiftBlockEntity> consumer) {
|
||||||
|
for(int id : map.keySet()) {
|
||||||
|
if(consumer.test(id, map.get(id))) {
|
||||||
|
map.remove(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ public abstract class PocketGeneratorReference extends VirtualSingularPocket {
|
||||||
|
|
||||||
RiftManager manager = new RiftManager(pocket);
|
RiftManager manager = new RiftManager(pocket);
|
||||||
|
|
||||||
generator.apply(parameters, manager);
|
generator.applyModifiers(parameters, manager);
|
||||||
|
|
||||||
this.applyModifiers(parameters, manager);
|
this.applyModifiers(parameters, manager);
|
||||||
generator.setup(pocket, parameters, setupLoot != null ? setupLoot : true);
|
generator.setup(pocket, parameters, setupLoot != null ? setupLoot : true);
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"type": "dimdoors:schematic",
|
||||||
|
"id": "v2/custom/purpur_hallway",
|
||||||
|
"modifiers": [
|
||||||
|
{
|
||||||
|
"layers": [
|
||||||
|
{
|
||||||
|
"block_state": "dimdoors:pink_ancient_fabric",
|
||||||
|
"thickness": "1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "dimdoors:shell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dimdoors:rift_data",
|
||||||
|
"ids": [0],
|
||||||
|
"rift_data": "rift_data/pocket_entrance"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "dimdoors:rift_data",
|
||||||
|
"ids": [1,2,3,4,5,6,7],
|
||||||
|
"rift_data": "rift_data/public_entrance"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"offset_x": "1",
|
||||||
|
"offset_y": "1",
|
||||||
|
"offset_z": "1"
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"id": "custom/purpur_hallway",
|
||||||
|
"type": "dimdoors:id"
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"destination": {
|
||||||
|
"ifDestination": {
|
||||||
|
"type": "dimdoors:pocket_exit"
|
||||||
|
},
|
||||||
|
"weight": 1.0,
|
||||||
|
"type": "dimdoors:pocket_entrance"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"destination": {
|
||||||
|
"type": "dimdoors:public_pocket"
|
||||||
|
}
|
||||||
|
}
|
Binary file not shown.
Loading…
Reference in a new issue