Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make Ancient Cyphers datapackable #856

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ data class HexPattern(val startDir: HexDir, val angles: MutableList<HexAngle> =

@JvmField
val CODEC: Codec<HexPattern> = RecordCodecBuilder.create({instance -> instance.group(
Codec.STRING.fieldOf(TAG_START_DIR).forGetter(HexPattern::anglesSignature),
HexDir.CODEC.fieldOf(TAG_ANGLES).forGetter(HexPattern::startDir)
Codec.STRING.fieldOf(TAG_ANGLES).forGetter(HexPattern::anglesSignature),
HexDir.CODEC.fieldOf(TAG_START_DIR).forGetter(HexPattern::startDir)
).apply(instance, HexPattern::fromAngles)
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import java.util.List;

public class ItemAncientCypher extends ItemCypher {
public static final String TAG_PATTERNS = "patterns";
public static final String TAG_HEX_NAME = "hex_name";

public ItemAncientCypher(Properties pProperties) {
Expand Down Expand Up @@ -45,7 +44,7 @@ public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List<Compo
super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced);

// also show contained spell
var patternsTag = NBTHelper.getList(pStack, TAG_PATTERNS, Tag.TAG_COMPOUND);
var patternsTag = NBTHelper.getList(pStack, TAG_PROGRAM, Tag.TAG_COMPOUND);
if (patternsTag != null) {
var storedHex = Component.translatable("hexcasting.tooltip.stored_hex");
for (var iotaTag : patternsTag) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package at.petrak.hexcasting.common.loot;

import at.petrak.hexcasting.api.casting.iota.PatternIota;
import at.petrak.hexcasting.api.casting.iota.IotaType;
import at.petrak.hexcasting.api.casting.math.HexDir;
import at.petrak.hexcasting.api.casting.math.HexPattern;
import at.petrak.hexcasting.api.mod.HexConfig;
import at.petrak.hexcasting.api.utils.HexUtils;
import at.petrak.hexcasting.api.item.VariantItem;
import at.petrak.hexcasting.api.misc.MediaConstants;
import at.petrak.hexcasting.common.items.magic.ItemAncientCypher;
import at.petrak.hexcasting.common.items.magic.ItemPackagedHex;
import at.petrak.hexcasting.common.lib.HexLootFunctions;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
Expand All @@ -22,9 +18,6 @@
import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;

import java.util.List;
import com.mojang.datafixers.util.Pair;

/**
* Add a random preset hex to the ancient cypher, and select a random variant.
* <p>
Expand All @@ -40,20 +33,18 @@ public AddHexToAncientCypherFunc(LootItemCondition[] lootItemConditions) {
* This doesn't actually have any params so extract behaviour out for the benefit of forge
*/
public static ItemStack doStatic(ItemStack stack, RandomSource rand) {
var hex = LOOT_HEXES.get(rand.nextInt(LOOT_HEXES.size()));
var hex = AncientCypherManager.INSTANCE.randomHex(rand);
var patsTag = new ListTag();
for (var patString : hex.getSecond()){
var pieces = patString.split(" ");
var pat = HexPattern.fromAngles(pieces[1],HexDir.fromString(pieces[0]));
patsTag.add(IotaType.serialize(new PatternIota(pat)));
for (var pat : hex.getSecond()){
patsTag.add(IotaType.serialize(pat));
}

var tag = new CompoundTag();
tag.putString(ItemAncientCypher.TAG_HEX_NAME, hex.getFirst());
tag.putString(ItemAncientCypher.TAG_HEX_NAME, "hexcasting.loot_hex." + hex.getFirst());
tag.putLong(ItemAncientCypher.TAG_MEDIA, 32*MediaConstants.SHARD_UNIT);
tag.putLong(ItemAncientCypher.TAG_MAX_MEDIA, 32*MediaConstants.SHARD_UNIT);
tag.putInt(VariantItem.TAG_VARIANT, rand.nextInt(8));
tag.put(ItemAncientCypher.TAG_PATTERNS, patsTag);
tag.put(ItemPackagedHex.TAG_PROGRAM, patsTag);
stack.getOrCreateTag().merge(tag);

return stack;
Expand Down Expand Up @@ -81,24 +72,4 @@ public AddHexToAncientCypherFunc deserialize(JsonObject object, JsonDeserializat
return new AddHexToAncientCypherFunc(conditions);
}
}

// TODO: make this datapackable
private static final List<Pair<String, String[]>> LOOT_HEXES = List.of(
new Pair<>("hexcasting.loot_hex.shatter", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","EAST qaqqqqq"}),
new Pair<>("hexcasting.loot_hex.kindle", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","SOUTH_EAST aaqawawa"}),
new Pair<>("hexcasting.loot_hex.illuminate", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","NORTH_EAST qqd"}),
new Pair<>("hexcasting.loot_hex.growth", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","SOUTH_EAST aqaaedwd","EAST aadaadaa","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw"}),
new Pair<>("hexcasting.loot_hex.lunge", new String[] {"NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}),
new Pair<>("hexcasting.loot_hex.sidestep", new String[] {"NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","NORTH_WEST eqqq","SOUTH_EAST aqaawd","SOUTH_EAST e","NORTH_WEST qqqqqew","SOUTH_WEST eeeeeqw","SOUTH_EAST awdd","NORTH_EAST wdedw","SOUTH_WEST awqqqwaqw"}),
new Pair<>("hexcasting.loot_hex.ascend", new String[] {"NORTH_EAST qaq","SOUTH_EAST aqaae","WEST qqqqqawwawawd"}),
new Pair<>("hexcasting.loot_hex.blink", new String[] {"NORTH_EAST qaq","EAST aadaa","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","NORTH_EAST qaq","EAST aa","NORTH_WEST wddw","NORTH_EAST wqaqw","SOUTH_EAST aqaaw","NORTH_WEST wddw","SOUTH_WEST awqqqwaq"}),
new Pair<>("hexcasting.loot_hex.blastoff", new String[] {"NORTH_EAST qaq","NORTH_WEST qqqqqew","SOUTH_EAST aqaawaa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}),
new Pair<>("hexcasting.loot_hex.radar", new String[] {"WEST qqq","EAST aadaa","EAST aa","SOUTH_EAST aqaawa","SOUTH_WEST ewdqdwe","NORTH_EAST de","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaeaqq","SOUTH_EAST qqqqqwdeddwd","NORTH_EAST dadad"}),
new Pair<>("hexcasting.loot_hex.beckon", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST weaqa","EAST aadaa","EAST dd","NORTH_EAST qaq","EAST aa","EAST aawdd","NORTH_WEST wddw","EAST aadaa","NORTH_EAST wqaqw","NORTH_EAST wdedw","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}),
new Pair<>("hexcasting.loot_hex.detonate", new String[] {"NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaedwd","EAST ddwddwdd"}),
new Pair<>("hexcasting.loot_hex.shockwave", new String[] {"NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaawaa","EAST aadaadaa","SOUTH_EAST aqawqadaq","SOUTH_EAST aqaaedwd","EAST aawaawaa","NORTH_EAST qqa","EAST qaqqqqq"}),
new Pair<>("hexcasting.loot_hex.heat_wave", new String[] {"WEST qqq","SOUTH_EAST aaqawawa","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwded","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"}),
new Pair<>("hexcasting.loot_hex.wither_wave", new String[] {"WEST qqq","SOUTH_EAST aqaae","SOUTH_EAST aqaaw","SOUTH_WEST qqqqqaewawawe","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwdeddwd","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"}),
new Pair<>("hexcasting.loot_hex.flight_zone", new String[] {"NORTH_EAST qaq","SOUTH_EAST aqaaq","SOUTH_WEST awawaawq"})
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package at.petrak.hexcasting.common.loot;

import at.petrak.hexcasting.api.HexAPI;
import at.petrak.hexcasting.api.casting.iota.Iota;
import at.petrak.hexcasting.api.casting.iota.PatternIota;
import at.petrak.hexcasting.api.casting.math.HexPattern;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.JsonOps;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener;
import net.minecraft.util.RandomSource;
import net.minecraft.util.profiling.ProfilerFiller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AncientCypherManager extends SimpleJsonResourceReloadListener {
public static final AncientCypherManager INSTANCE = new AncientCypherManager();

private Map<ResourceLocation, List<Iota>> data;

private AncientCypherManager() {
super(new Gson(), "loot_cyphers");
}

@Override
protected Map<ResourceLocation, JsonElement> prepare(ResourceManager $$0, ProfilerFiller $$1) {
return super.prepare($$0, $$1);
}

@Override
protected void apply(Map<ResourceLocation, JsonElement> map, ResourceManager resourceManager, ProfilerFiller profilerFiller) {
Map<ResourceLocation, List<Iota>> data = new HashMap<>(map.size());
for (var entry : map.entrySet()) {
var key = entry.getKey();
try {
var value = entry.getValue().getAsJsonArray();
var iotaList = new ArrayList<Iota>(value.size());
for (var elem : value) {
var pattern = HexPattern.CODEC.parse(JsonOps.INSTANCE, elem).resultOrPartial(HexAPI.LOGGER::error).orElseThrow();
iotaList.add(new PatternIota(pattern));
}
data.put(key, iotaList);
} catch (Exception e) {
HexAPI.LOGGER.error("Error loading custom loot cypher {}: {}", key, e.getMessage());
}
}
this.data = data;
}

public Pair<ResourceLocation, List<Iota>> randomHex(RandomSource rand) {
var map = this.data;
var entries = map.entrySet().stream().toList();
var entry = entries.get(rand.nextInt(entries.size()));
return Pair.of(entry.getKey(), entry.getValue());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@
infinite_media: "Infinite",
},

loot_hex: {
"loot_hex.hexcasting:": {
"shatter": "Shatter",
"kindle": "Kindle",
"illuminate": "Illuminate",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaae" },
{ "start_dir": "WEST", "angles": "qqqqqawwawawd" }
]
19 changes: 19 additions & 0 deletions Common/src/main/resources/data/hexcasting/loot_cyphers/beckon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "EAST", "angles": "weaqa" },
{ "start_dir": "EAST", "angles": "aadaa" },
{ "start_dir": "EAST", "angles": "dd" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "EAST", "angles": "aawdd" },
{ "start_dir": "NORTH_WEST", "angles": "wddw" },
{ "start_dir": "EAST", "angles": "aadaa" },
{ "start_dir": "NORTH_EAST", "angles": "wqaqw" },
{ "start_dir": "NORTH_EAST", "angles": "wdedw" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaawa" },
{ "start_dir": "SOUTH_EAST", "angles": "waqaw" },
{ "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "NORTH_WEST", "angles": "qqqqqew" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaawaa" },
{ "start_dir": "SOUTH_EAST", "angles": "waqaw" },
{ "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" }
]
15 changes: 15 additions & 0 deletions Common/src/main/resources/data/hexcasting/loot_cyphers/blink.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aadaa" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "EAST", "angles": "wqaawdd" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "NORTH_WEST", "angles": "wddw" },
{ "start_dir": "NORTH_EAST", "angles": "wqaqw" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaaw" },
{ "start_dir": "NORTH_WEST", "angles": "wddw" },
{ "start_dir": "SOUTH_WEST", "angles": "awqqqwaq" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaaedwd" },
{ "start_dir": "EAST", "angles": "ddwddwdd" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaaq" },
{ "start_dir": "SOUTH_WEST", "angles": "awawaawq" }
]
16 changes: 16 additions & 0 deletions Common/src/main/resources/data/hexcasting/loot_cyphers/growth.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "EAST", "angles": "aadadaaw" },
{ "start_dir": "EAST", "angles": "wqaawdd" },
{ "start_dir": "NORTH_EAST", "angles": "ddqdd" },
{ "start_dir": "EAST", "angles": "weddwaa" },
{ "start_dir": "NORTH_EAST", "angles": "waaw" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaaedwd" },
{ "start_dir": "EAST", "angles": "aadaadaa" },
{ "start_dir": "NORTH_EAST", "angles": "wqaqwawqaqw" },
{ "start_dir": "NORTH_EAST", "angles": "wqaqwawqaqw" },
{ "start_dir": "NORTH_EAST", "angles": "wqaqwawqaqw" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{ "start_dir": "WEST", "angles": "qqq" },
{ "start_dir": "SOUTH_EAST", "angles": "aaqawawa" },
{ "start_dir": "EAST", "angles": "eee" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaae" },
{ "start_dir": "SOUTH_EAST", "angles": "qqqqqwded" },
{ "start_dir": "SOUTH_WEST", "angles": "aaqwqaa" },
{ "start_dir": "SOUTH_EAST", "angles": "a" },
{ "start_dir": "NORTH_EAST", "angles": "dadad" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "EAST", "angles": "aadadaaw" },
{ "start_dir": "EAST", "angles": "wqaawdd" },
{ "start_dir": "NORTH_EAST", "angles": "ddqdd" },
{ "start_dir": "EAST", "angles": "weddwaa" },
{ "start_dir": "NORTH_EAST", "angles": "waaw" },
{ "start_dir": "NORTH_EAST", "angles": "qqd" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "EAST", "angles": "wqaawdd" },
{ "start_dir": "SOUTH_EAST", "angles": "aaqawawa" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aadaa" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaawa" },
{ "start_dir": "SOUTH_EAST", "angles": "waqaw" },
{ "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" }
]
14 changes: 14 additions & 0 deletions Common/src/main/resources/data/hexcasting/loot_cyphers/radar.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[
{ "start_dir": "WEST", "angles": "qqq" },
{ "start_dir": "EAST", "angles": "aadaa" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaawa" },
{ "start_dir": "SOUTH_WEST", "angles": "ewdqdwe" },
{ "start_dir": "NORTH_EAST", "angles": "de" },
{ "start_dir": "EAST", "angles": "eee" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaaeaqq" },
{ "start_dir": "SOUTH_EAST", "angles": "qqqqqwdeddwd" },
{ "start_dir": "NORTH_EAST", "angles": "dadad" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "EAST", "angles": "wqaawdd" },
{ "start_dir": "EAST", "angles": "qaqqqqq" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaawaa" },
{ "start_dir": "EAST", "angles": "aadaadaa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqawqadaq" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaaedwd" },
{ "start_dir": "EAST", "angles": "aawaawaa" },
{ "start_dir": "NORTH_EAST", "angles": "qqa" },
{ "start_dir": "EAST", "angles": "qaqqqqq" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aadaa" },
{ "start_dir": "NORTH_EAST", "angles": "wa" },
{ "start_dir": "NORTH_WEST", "angles": "eqqq" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaawd" },
{ "start_dir": "SOUTH_EAST", "angles": "e" },
{ "start_dir": "NORTH_WEST", "angles": "qqqqqew" },
{ "start_dir": "SOUTH_WEST", "angles": "eeeeeqw" },
{ "start_dir": "SOUTH_EAST", "angles": "awdd" },
{ "start_dir": "NORTH_EAST", "angles": "wdedw" },
{ "start_dir": "SOUTH_WEST", "angles": "awqqqwaqw" }
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[
{ "start_dir": "WEST", "angles": "qqq" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaae" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaaw" },
{ "start_dir": "SOUTH_WEST", "angles": "qqqqqaewawawe" },
{ "start_dir": "EAST", "angles": "eee" },
{ "start_dir": "NORTH_EAST", "angles": "qaq" },
{ "start_dir": "EAST", "angles": "aa" },
{ "start_dir": "SOUTH_EAST", "angles": "aqaae" },
{ "start_dir": "SOUTH_EAST", "angles": "qqqqqwdeddwd" },
{ "start_dir": "SOUTH_WEST", "angles": "aaqwqaa" },
{ "start_dir": "SOUTH_EAST", "angles": "a" },
{ "start_dir": "NORTH_EAST", "angles": "dadad" }
]
Loading
Loading