geforkt von Mirrors/FastAsyncWorldEdit
Remove PE/PC remapping
Dieser Commit ist enthalten in:
Ursprung
5de7c31a8c
Commit
e2d7a5918d
@ -1,509 +0,0 @@
|
||||
package com.boydti.fawe.object.clipboard.remap;
|
||||
|
||||
import com.google.common.io.Resources;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.sk89q.jnbt.CompoundTag;
|
||||
import com.sk89q.worldedit.WorldEditException;
|
||||
import com.sk89q.worldedit.blocks.BaseItem;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.world.block.BaseBlock;
|
||||
import com.sk89q.worldedit.world.block.BlockStateHolder;
|
||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
// TODO FIXME
|
||||
public class ClipboardRemapper {
|
||||
private final RemapPlatform from;
|
||||
|
||||
public enum RemapPlatform {
|
||||
PE,
|
||||
PC
|
||||
;
|
||||
public RemapPlatform opposite() {
|
||||
return this == PE ? PC : PE;
|
||||
}
|
||||
}
|
||||
|
||||
public ClipboardRemapper() {
|
||||
this.from = null;
|
||||
}
|
||||
|
||||
private WikiScraper scraper;
|
||||
|
||||
public synchronized WikiScraper loadItemMapping() throws IOException {
|
||||
WikiScraper tmp = scraper;
|
||||
if (tmp == null) {
|
||||
scraper = tmp = new WikiScraper();
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
// TODO FIXME
|
||||
public BaseItem remapItem(String name, int damage) {
|
||||
// if (name.isEmpty()) return new BaseItem(0);
|
||||
// if (from == RemapPlatform.PC) {
|
||||
// BundledBlockData.BlockEntry state = BundledBlockData.getInstance().findById(name);
|
||||
// if (state != null) {
|
||||
// BaseBlock remapped = remap(new BaseBlock(state.legacyId, damage));
|
||||
// return new BaseItem(remapped.getId(), (short) remapped.getData());
|
||||
// } else {
|
||||
// try {
|
||||
// name = name.replace("minecraft:", "");
|
||||
// WikiScraper scraper = loadItemMapping();
|
||||
// Map<String, Integer> mapFrom = scraper.scapeOrCache(WikiScraper.Wiki.valueOf("ITEM_MAPPINGS_" + from.name()));
|
||||
// Map<String, Integer> mapTo = scraper.scapeOrCache(WikiScraper.Wiki.valueOf("ITEM_MAPPINGS_" + from.opposite().name()));
|
||||
// scraper.expand(mapTo);
|
||||
// switch (name) {
|
||||
// case "spruce_boat": return new BaseItem(333, (short) 1);
|
||||
// case "birch_boat": return new BaseItem(333, (short) 2);
|
||||
// case "jungle_boat": return new BaseItem(333, (short) 3);
|
||||
// case "acacia_boat": return new BaseItem(333, (short) 4);
|
||||
// case "dark_oak_boat": return new BaseItem(333, (short) 5);
|
||||
// case "water_bucket": return new BaseItem(325, (short) 8);
|
||||
// case "lava_bucket": return new BaseItem(325, (short) 10);
|
||||
// case "milk_bucket": return new BaseItem(325, (short) 1);
|
||||
// case "tipped_arrow":
|
||||
// case "spectral_arrow":
|
||||
// name = "arrow"; // Unsupported
|
||||
// break;
|
||||
// case "totem_of_undying":
|
||||
// name = "totem";
|
||||
// break;
|
||||
// case "furnace_minecart":
|
||||
// name = "minecart"; // Unsupported
|
||||
// break;
|
||||
// }
|
||||
// Integer itemId = mapTo.get(name);
|
||||
// if (itemId == null) itemId = mapTo.get(name.replace("_", ""));
|
||||
// if (itemId == null) itemId = mapFrom.get(name);
|
||||
// if (itemId != null) return new BaseItem(itemId, (short) damage);
|
||||
// } catch (IOException ignore) {
|
||||
// ignore.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
return new BaseItem(ItemTypes.AIR);
|
||||
}
|
||||
|
||||
public Map.Entry<String, Integer> remapItem(int id, int data) {
|
||||
throw new UnsupportedOperationException("TODO");
|
||||
}
|
||||
|
||||
public int remapEntityId(String id) {
|
||||
try {
|
||||
Map<String, Integer> mappings = loadItemMapping().scapeOrCache(WikiScraper.Wiki.ENTITY_MAPPINGS);
|
||||
id = id.replace("minecraft:", "");
|
||||
Integer legacyId = mappings.get(id);
|
||||
if (legacyId != null) return legacyId;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public String remapBlockEntityId(String id) {
|
||||
if (from == null) return id;
|
||||
switch (from) {
|
||||
case PE: {
|
||||
switch (id) {
|
||||
case "EnchantTable": return "minecraft:enchanting_table";
|
||||
case "Music": return "minecraft:noteblock";
|
||||
case "Chest": return "minecraft:trapped_chest";
|
||||
case "ChalkboardBlock": return "minecraft:chalk_board_block";
|
||||
case "FallingSand": return "minecraft:falling_block";
|
||||
case "FireworksRocketEntity": return "minecraft:fireworks_rocket";
|
||||
case "LavaSlime": return "minecraft:magma_cube";
|
||||
case "MinecartChest": return "minecraft:chest_minecart";
|
||||
case "MinecartCommandBlock": return "minecraft:commandblock_minecart";
|
||||
case "MinecartFurnace": return "minecraft:furnace_minecart";
|
||||
case "MinecartHopper": return "minecraft:hopper_minecart";
|
||||
case "MinecartRideable": return "minecraft:minecart";
|
||||
case "MinecartSpawner": return "minecraft:spawner_minecart";
|
||||
case "MinecartTNT": return "minecraft:tnt_minecart";
|
||||
case "MushroomCow": return "minecraft:mooshroom";
|
||||
case "Ocelot": return "minecraft:ocelot";
|
||||
case "PigZombie": return "minecraft:zombie_pigman";
|
||||
case "PrimedTnt": return "minecraft:tnt";
|
||||
case "SnowMan": return "minecraft:snowman";
|
||||
case "ThrownEgg": return "minecraft:egg";
|
||||
case "ThrownEnderpearl": return "minecraft:ender_pearl";
|
||||
case "ThrownExpBottle": return "minecraft:xp_bottle";
|
||||
case "ThrownPotion": return "minecraft:potion";
|
||||
case "WitherBoss": return "minecraft:wither";
|
||||
case "XPOrb": return "minecraft:xp_orb";
|
||||
}
|
||||
StringBuilder result = new StringBuilder("minecraft:");
|
||||
for (int i = 0; i < result.length(); i++) {
|
||||
char c = id.charAt(i);
|
||||
if (Character.isUpperCase(c)) {
|
||||
c = Character.toLowerCase(c);
|
||||
if (i != 0) result.append('_');
|
||||
}
|
||||
result.append(c);
|
||||
}
|
||||
id = result.toString();
|
||||
return id;
|
||||
}
|
||||
case PC: {
|
||||
switch (id) {
|
||||
case "minecraft:enchanting_table": return "EnchantTable";
|
||||
case "minecraft:noteblock": return "Music";
|
||||
case "minecraft:trapped_chest": return "Chest";
|
||||
case "minecraft:chalk_board_block": return "ChalkboardBlock";
|
||||
case "minecraft:falling_block": return "FallingSand";
|
||||
case "minecraft:fireworks_rocket": return "FireworksRocketEntity";
|
||||
case "minecraft:magma_cube": return "LavaSlime";
|
||||
case "minecraft:chest_minecart": return "MinecartChest";
|
||||
case "minecraft:commandblock_minecart": return "MinecartCommandBlock";
|
||||
case "minecraft:furnace_minecart": return "MinecartFurnace";
|
||||
case "minecraft:hopper_minecart": return "MinecartHopper";
|
||||
case "minecraft:minecart": return "MinecartRideable";
|
||||
case "minecraft:spawner_minecart": return "MinecartSpawner";
|
||||
case "minecraft:tnt_minecart": return "MinecartTNT";
|
||||
case "minecraft:mooshroom": return "MushroomCow";
|
||||
case "minecraft:ocelot": return "Ocelot";
|
||||
case "minecraft:zombie_pigman": return "PigZombie";
|
||||
case "minecraft:tnt": return "PrimedTnt";
|
||||
case "minecraft:snowman": return "SnowMan";
|
||||
case "minecraft:egg": return "ThrownEgg";
|
||||
case "minecraft:ender_pearl": return "ThrownEnderpearl";
|
||||
case "minecraft:xp_bottle": return "ThrownExpBottle";
|
||||
case "minecraft:potion": return "ThrownPotion";
|
||||
case "minecraft:wither": return "WitherBoss";
|
||||
case "minecraft:xp_orb": return "XPOrb";
|
||||
}
|
||||
id = id.replace("minecraft:", "");
|
||||
StringBuilder result = new StringBuilder();
|
||||
boolean toUpper = false;
|
||||
for (int i = 0; i < id.length(); i++) {
|
||||
char c = id.charAt(i);
|
||||
if (i == 0) toUpper = true;
|
||||
if (c == '_') {
|
||||
toUpper = true;
|
||||
} else {
|
||||
result.append(toUpper ? Character.toUpperCase(c) : c);
|
||||
toUpper = false;
|
||||
}
|
||||
}
|
||||
id = result.toString();
|
||||
return id;
|
||||
}
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
private Map<String, List<Integer>> parse(File file) throws IOException {
|
||||
JsonParser parser = new JsonParser();
|
||||
JsonObject toParse = (JsonObject) parser.parse(Resources.toString(file.toURL(), Charset.defaultCharset()));
|
||||
Map<String, List<Integer>> map = new HashMap<>();
|
||||
|
||||
// outer:
|
||||
// for (Map.Entry<String, JsonElement> entry : toParse.entrySet()) {
|
||||
// String key = entry.getKey();
|
||||
// JsonObject value = entry.getValue().getAsJsonObject();
|
||||
// if (MathMan.isInteger(key)) {
|
||||
// int id = Integer.parseInt(key);
|
||||
// for (Map.Entry<String, JsonElement> dataEntry : value.entrySet()) {
|
||||
// String dataKey = dataEntry.getKey();
|
||||
// if (MathMan.isInteger(dataKey)) {
|
||||
// int data = Integer.parseInt(dataEntry.getKey());
|
||||
// int combined = (id << 4) + data;
|
||||
// String name = dataEntry.getValue().getAsJsonObject().get("intermediateID").getAsString();
|
||||
// map.putIfAbsent(name, new ArrayList<>());
|
||||
// map.get(name).add(combined);
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// String name = entry.getKey();
|
||||
// int id = value.get("id").getAsInt();
|
||||
// int data = value.get("data").getAsInt();
|
||||
// int combined = FaweCache.IMP.getCombined(id, data);
|
||||
// map.putIfAbsent(name, new ArrayList<>());
|
||||
// map.get(name).add(combined);
|
||||
// }
|
||||
// }
|
||||
return map;
|
||||
}
|
||||
|
||||
private HashMap<BaseBlock, BaseBlock> getPEtoPCMappings() {
|
||||
HashMap<BaseBlock, BaseBlock> mapPEtoPC = new HashMap<>();
|
||||
mapPEtoPC.put(new BaseBlock(281, -1), new BaseBlock(25, -1));
|
||||
mapPEtoPC.put(new BaseBlock(95,-1), new BaseBlock(166,-1));
|
||||
mapPEtoPC.put(new BaseBlock(125,-1), new BaseBlock(158,-1));
|
||||
mapPEtoPC.put(new BaseBlock(126,-1), new BaseBlock(157,-1));
|
||||
mapPEtoPC.put(new BaseBlock(157,-1), new BaseBlock(125,-1));
|
||||
mapPEtoPC.put(new BaseBlock(158,-1), new BaseBlock(126,-1));
|
||||
mapPEtoPC.put(new BaseBlock(188,-1), new BaseBlock(210,-1));
|
||||
mapPEtoPC.put(new BaseBlock(189,-1), new BaseBlock(211,-1));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(155,4), new BaseBlock(155,10));
|
||||
mapPEtoPC.put(new BaseBlock(155,3), new BaseBlock(155,6));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(198,-1), new BaseBlock(208,-1));
|
||||
mapPEtoPC.put(new BaseBlock(207,-1), new BaseBlock(212,-1));
|
||||
// beetroot
|
||||
mapPEtoPC.put(new BaseBlock(244, 2), new BaseBlock(207, 1));
|
||||
mapPEtoPC.put(new BaseBlock(244, 4), new BaseBlock(207, 2));
|
||||
mapPEtoPC.put(new BaseBlock(244, 7), new BaseBlock(207, 3));
|
||||
for (int data = 3; data < 16; data++) mapPEtoPC.putIfAbsent(new BaseBlock(244, data), new BaseBlock(207, data));
|
||||
|
||||
for (int data = 0; data < 16; data++) {
|
||||
mapPEtoPC.put(new BaseBlock(218, data), new BaseBlock(219 + data, -1));
|
||||
}
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(220,-1), new BaseBlock(235,-1));
|
||||
mapPEtoPC.put(new BaseBlock(220,-1), new BaseBlock(235,-1));
|
||||
mapPEtoPC.put(new BaseBlock(221,-1), new BaseBlock(236,-1));
|
||||
mapPEtoPC.put(new BaseBlock(222,-1), new BaseBlock(237,-1));
|
||||
mapPEtoPC.put(new BaseBlock(223,-1), new BaseBlock(238,-1));
|
||||
mapPEtoPC.put(new BaseBlock(224,-1), new BaseBlock(239,-1));
|
||||
mapPEtoPC.put(new BaseBlock(225,-1), new BaseBlock(240,-1));
|
||||
mapPEtoPC.put(new BaseBlock(226,-1), new BaseBlock(241,-1));
|
||||
mapPEtoPC.put(new BaseBlock(227,-1), new BaseBlock(242,-1));
|
||||
mapPEtoPC.put(new BaseBlock(228,-1), new BaseBlock(243,-1));
|
||||
mapPEtoPC.put(new BaseBlock(229,-1), new BaseBlock(244,-1));
|
||||
mapPEtoPC.put(new BaseBlock(231,-1), new BaseBlock(246,-1));
|
||||
mapPEtoPC.put(new BaseBlock(232,-1), new BaseBlock(247,-1));
|
||||
mapPEtoPC.put(new BaseBlock(233,-1), new BaseBlock(248,-1));
|
||||
mapPEtoPC.put(new BaseBlock(234,-1), new BaseBlock(249,-1));
|
||||
|
||||
for (int id = 220; id <= 235; id++) {
|
||||
int pcId = id + 15;
|
||||
int peId = id == 230 ? 219 : id;
|
||||
mapPEtoPC.put(new BaseBlock(peId,3), new BaseBlock(pcId,0));
|
||||
mapPEtoPC.put(new BaseBlock(peId,4), new BaseBlock(pcId,1));
|
||||
mapPEtoPC.put(new BaseBlock(peId,2), new BaseBlock(pcId,2));
|
||||
mapPEtoPC.put(new BaseBlock(peId,5), new BaseBlock(pcId,3));
|
||||
}
|
||||
|
||||
for (int id : new int[] {29, 33, 34}) {
|
||||
mapPEtoPC.put(new BaseBlock(id,3), new BaseBlock(id,2));
|
||||
mapPEtoPC.put(new BaseBlock(id,2), new BaseBlock(id,3));
|
||||
mapPEtoPC.put(new BaseBlock(id,5), new BaseBlock(id,4));
|
||||
mapPEtoPC.put(new BaseBlock(id,4), new BaseBlock(id,5));
|
||||
|
||||
// mapPEtoPC.put(new BaseBlock(id,11), new BaseBlock(id,10));
|
||||
// mapPEtoPC.put(new BaseBlock(id,10), new BaseBlock(id,11));
|
||||
// mapPEtoPC.put(new BaseBlock(id,13), new BaseBlock(id,12));
|
||||
// mapPEtoPC.put(new BaseBlock(id,12), new BaseBlock(id,13));
|
||||
}
|
||||
mapPEtoPC.put(new BaseBlock(250,-1), new BaseBlock(36,-1));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(236,-1), new BaseBlock(251,-1));
|
||||
mapPEtoPC.put(new BaseBlock(237,-1), new BaseBlock(252,-1));
|
||||
mapPEtoPC.put(new BaseBlock(240,-1), new BaseBlock(199,-1));
|
||||
mapPEtoPC.put(new BaseBlock(241,-1), new BaseBlock(95,-1));
|
||||
mapPEtoPC.put(new BaseBlock(243,0), new BaseBlock(3, 2));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(251,-1), new BaseBlock(218,-1));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(168,2), new BaseBlock(168,1));
|
||||
mapPEtoPC.put(new BaseBlock(168,1), new BaseBlock(168,2));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(44,7), new BaseBlock(44,6));
|
||||
mapPEtoPC.put(new BaseBlock(44,6), new BaseBlock(44,7));
|
||||
// Top variant
|
||||
mapPEtoPC.put(new BaseBlock(44,7 + 8), new BaseBlock(44,6 + 8));
|
||||
mapPEtoPC.put(new BaseBlock(44,6 + 8), new BaseBlock(44,7 + 8));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(43,7), new BaseBlock(43,6));
|
||||
mapPEtoPC.put(new BaseBlock(43,6), new BaseBlock(43,7));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(36,-1), new BaseBlock(34, 1));
|
||||
mapPEtoPC.put(new BaseBlock(85, 1), new BaseBlock(188,-1));
|
||||
mapPEtoPC.put(new BaseBlock(85,2), new BaseBlock(189,-1));
|
||||
mapPEtoPC.put(new BaseBlock(85,3), new BaseBlock(190,-1));
|
||||
mapPEtoPC.put(new BaseBlock(85,4), new BaseBlock(192,-1));
|
||||
mapPEtoPC.put(new BaseBlock(85, 5), new BaseBlock(191,-1));
|
||||
mapPEtoPC.put(new BaseBlock(202,-1), new BaseBlock(203,2));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(201,2), new BaseBlock(202,0));
|
||||
mapPEtoPC.put(new BaseBlock(201,10), new BaseBlock(202,8));
|
||||
mapPEtoPC.put(new BaseBlock(201,6), new BaseBlock(202,4));
|
||||
mapPEtoPC.put(new BaseBlock(181,1), new BaseBlock(204,-1));
|
||||
{
|
||||
for (int data = 0; data < 16; data++) mapPEtoPC.put(new BaseBlock(208, data), new BaseBlock(198, data));
|
||||
mapPEtoPC.put(new BaseBlock(208,4), new BaseBlock(198,5));
|
||||
mapPEtoPC.put(new BaseBlock(208,2), new BaseBlock(198,3));
|
||||
mapPEtoPC.put(new BaseBlock(208,5), new BaseBlock(198,4));
|
||||
mapPEtoPC.put(new BaseBlock(208,3), new BaseBlock(198,2));
|
||||
}
|
||||
|
||||
for (int id : new int[] {77, 143}) { // button
|
||||
mapPEtoPC.put(new BaseBlock(id,4), new BaseBlock(id,2));
|
||||
mapPEtoPC.put(new BaseBlock(id,1), new BaseBlock(id,5));
|
||||
mapPEtoPC.put(new BaseBlock(id,2), new BaseBlock(id,4));
|
||||
mapPEtoPC.put(new BaseBlock(id,5), new BaseBlock(id,1));
|
||||
|
||||
mapPEtoPC.put(new BaseBlock(id,13), new BaseBlock(id,9));
|
||||
mapPEtoPC.put(new BaseBlock(id,12), new BaseBlock(id,10));
|
||||
mapPEtoPC.put(new BaseBlock(id,10), new BaseBlock(id,12));
|
||||
mapPEtoPC.put(new BaseBlock(id,9), new BaseBlock(id,13));
|
||||
}
|
||||
|
||||
// leaves
|
||||
for (int data = 4; data < 8; data++) mapPEtoPC.put(new BaseBlock(18,data + 4), new BaseBlock(18,data));
|
||||
for (int data = 4; data < 8; data++) mapPEtoPC.put(new BaseBlock(18,data + 8), new BaseBlock(161,data));
|
||||
|
||||
for (int id : new int[] {96, 167}) { // trapdoor
|
||||
mapPEtoPC.put(new BaseBlock(id, 2), new BaseBlock(id, 0));
|
||||
mapPEtoPC.put(new BaseBlock(id, 3), new BaseBlock(id, 1));
|
||||
mapPEtoPC.put(new BaseBlock(id, 6), new BaseBlock(id, 8));
|
||||
mapPEtoPC.put(new BaseBlock(id, 7), new BaseBlock(id, 9));
|
||||
for (int data = 0; data < 4; data++) mapPEtoPC.putIfAbsent(new BaseBlock(id, data), new BaseBlock(id, 3 - data));
|
||||
for (int data = 4; data < 12; data++) mapPEtoPC.putIfAbsent(new BaseBlock(id, data), new BaseBlock(id, 15 - data));
|
||||
for (int data = 12; data < 16; data++) mapPEtoPC.putIfAbsent(new BaseBlock(id, data), new BaseBlock(id, 27 - data));
|
||||
}
|
||||
|
||||
return mapPEtoPC;
|
||||
}
|
||||
|
||||
public ClipboardRemapper(RemapPlatform fromPlatform, RemapPlatform toPlatform) {
|
||||
if (fromPlatform == toPlatform) {
|
||||
this.from = null;
|
||||
return;
|
||||
}
|
||||
|
||||
HashMap<BaseBlock, BaseBlock> mapPEtoPC = getPEtoPCMappings();
|
||||
|
||||
|
||||
for (Map.Entry<BaseBlock, BaseBlock> entry : mapPEtoPC.entrySet()) {
|
||||
BaseBlock from = entry.getKey();
|
||||
BaseBlock to = entry.getValue();
|
||||
if (fromPlatform == RemapPlatform.PE) {
|
||||
add(from, to);
|
||||
} else {
|
||||
add(to, from);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO any custom ids
|
||||
switch (fromPlatform) {
|
||||
case PE:
|
||||
for (int data = 0; data < 8; data++) add(new BaseBlock(182, 1), new BaseBlock(205, data));
|
||||
for (int data = 8; data < 16; data++) add(new BaseBlock(182, 9), new BaseBlock(205, data));
|
||||
for (int data = 0; data < 8; data++) add(new BaseBlock(182, 0), new BaseBlock(182, data));
|
||||
for (int data = 8; data < 16; data++) add(new BaseBlock(182, 8), new BaseBlock(182, data));
|
||||
break;
|
||||
case PC:
|
||||
add(new BaseBlock(202, -1), new BaseBlock(201, -1));
|
||||
add(new BaseBlock(204, -1), new BaseBlock(201, -1));
|
||||
for (int data = 0; data < 8; data++) add(new BaseBlock(205, data), new BaseBlock(182, 1));
|
||||
for (int data = 8; data < 16; data++) add(new BaseBlock(205, data), new BaseBlock(182, 9));
|
||||
for (int data = 0; data < 8; data++) add(new BaseBlock(182, data), new BaseBlock(182, 0));
|
||||
for (int data = 8; data < 16; data++) add(new BaseBlock(182, data), new BaseBlock(182, 8));
|
||||
|
||||
for (int id : new int[] {29, 33, 34}) {
|
||||
for (int data = 8; data < 16; data++) {
|
||||
add(new BaseBlock(id, data), remap(new BaseBlock(id, data - 8)));
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
this.from = fromPlatform;
|
||||
}
|
||||
|
||||
public void addBoth(BaseBlock from, BaseBlock to) {
|
||||
add(from, to);
|
||||
add(to, from);
|
||||
}
|
||||
|
||||
public void apply(Clipboard clipboard) throws WorldEditException {
|
||||
// if (clipboard instanceof BlockArrayClipboard) {
|
||||
// BlockArrayClipboard bac = (BlockArrayClipboard) clipboard;
|
||||
// bac.IMP = new RemappedClipboard(bac.IMP, this);
|
||||
// } else {
|
||||
// Region region = clipboard.getRegion();
|
||||
// for (BlockVector pos : region) {
|
||||
// BaseBlock block = clipboard.getBlock(pos);
|
||||
// BaseBlock newBlock = remap(block);
|
||||
// if (block != newBlock) {
|
||||
// clipboard.setBlock(pos, newBlock);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private char[] remapCombined = new char[Character.MAX_VALUE + 1];
|
||||
private boolean[] remap = new boolean[Character.MAX_VALUE + 1];
|
||||
private boolean[] remapIds = new boolean[4096];
|
||||
private boolean[] remapAllIds = new boolean[4096];
|
||||
private boolean[] remapAnyIds = new boolean[4096];
|
||||
private boolean[] remapData = new boolean[16];
|
||||
|
||||
public boolean hasRemapData(int data) {
|
||||
return remapData[data];
|
||||
}
|
||||
|
||||
public boolean hasRemapId(int id) {
|
||||
return remapAnyIds[id];
|
||||
}
|
||||
|
||||
public boolean hasRemap(int id) {
|
||||
return remapIds[id];
|
||||
}
|
||||
|
||||
public int remapId(int id) {
|
||||
if (remapAllIds[id]) {
|
||||
return remapCombined[id << 4] >> 4;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
public void add(BlockStateHolder from, BlockStateHolder to) {
|
||||
// if (from.getData() != to.getData()) {
|
||||
// if (from.getData() == -1) {
|
||||
// Arrays.fill(remapData, true);
|
||||
// } else {
|
||||
// remapData[from.getData()] = true;
|
||||
// }
|
||||
// }
|
||||
// if (from.getData() == -1) {
|
||||
// for (int data = 0; data < 16; data++) {
|
||||
// int combinedFrom = (from.getId() << 4) + data;
|
||||
// int combinedTo = to.getData() == -1 ? (to.getId() << 4) + data : to.getCombined();
|
||||
// remap[combinedFrom] = true;
|
||||
// remapCombined[combinedFrom] = (char) combinedTo;
|
||||
// remapIds[combinedFrom >> 4] = true;
|
||||
// if (from.getId() != to.getId()) {
|
||||
// remapAnyIds[combinedFrom >> 4] = true;
|
||||
// remapAllIds[from.getId()] = true;
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// int data = from.getData();
|
||||
// int combinedFrom = (from.getId() << 4) + data;
|
||||
// int combinedTo = to.getData() == -1 ? (to.getId() << 4) + data : to.getCombined();
|
||||
// remap[combinedFrom] = true;
|
||||
// remapCombined[combinedFrom] = (char) combinedTo;
|
||||
// remapIds[combinedFrom >> 4] = true;
|
||||
// if (from.getId() != to.getId()) {
|
||||
// remapAnyIds[combinedFrom >> 4] = true;
|
||||
// remapAllIds[from.getId()] = false;
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
public <B extends BlockStateHolder<B>> B remap(B block) {
|
||||
// int combined = block.getCombined();
|
||||
// if (remap[combined]) {
|
||||
// char value = remapCombined[combined];
|
||||
// BaseBlock newBlock = FaweCache.IMP.CACHE_BLOCK[value];
|
||||
// newBlock.setNbtData(block.getNbtData());
|
||||
// return newBlock;
|
||||
// }
|
||||
return block;
|
||||
}
|
||||
|
||||
public void remap(CompoundTag tag) {
|
||||
|
||||
}
|
||||
}
|
@ -1,133 +0,0 @@
|
||||
package com.boydti.fawe.object.clipboard.remap;
|
||||
|
||||
|
||||
import com.boydti.fawe.util.MainUtil;
|
||||
import com.google.common.io.Resources;
|
||||
import com.google.common.reflect.TypeToken;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class WikiScraper {
|
||||
public enum Wiki {
|
||||
ITEM_MAPPINGS_PE("https://minecraft.gamepedia.com/index.php?title=Bedrock_Edition_data_values&action=edit§ion=1"),
|
||||
ITEM_MAPPINGS_PC("https://minecraft.gamepedia.com/index.php?title=Java_Edition_data_values/Item_IDs&action=edit"),
|
||||
ENTITY_MAPPINGS("https://minecraft.gamepedia.com/index.php?title=Bedrock_Edition_data_values&action=edit§ion=4"),
|
||||
;
|
||||
public final String url;
|
||||
Wiki(String url) {this.url = url;}
|
||||
}
|
||||
|
||||
private EnumMap<Wiki, Map<String, Integer>> cache = new EnumMap<>(WikiScraper.Wiki.class);
|
||||
|
||||
public Map<String, Integer> expand(Map<String, Integer> map) {
|
||||
HashMap<String, Integer> newMap = new HashMap<>(map);
|
||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
||||
newMap.put(entry.getKey().replace("_", ""), entry.getValue());
|
||||
}
|
||||
return newMap;
|
||||
}
|
||||
|
||||
protected String getName() {
|
||||
return "item-mappings";
|
||||
}
|
||||
|
||||
public synchronized Map<String, Integer> scapeOrCache(Wiki wiki) throws IOException {
|
||||
Map<String, Integer> map;
|
||||
try {
|
||||
Map<String, Integer> cached = cache.get(wiki);
|
||||
if (cached != null) return cached;
|
||||
|
||||
File file = new File("lib" + File.separator + wiki.name().toLowerCase().replace('_', '-') + ".json");
|
||||
Gson gson = new Gson();
|
||||
if (file.exists()) {
|
||||
try {
|
||||
String str = Resources.toString(file.toURL(), Charset.defaultCharset());
|
||||
return gson.fromJson(str, new TypeToken<Map<String, Integer>>() {
|
||||
}.getType());
|
||||
} catch (JsonSyntaxException | IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
map = scrape(wiki);
|
||||
java.io.File parent = file.getParentFile();
|
||||
parent.mkdirs();
|
||||
file.createNewFile();
|
||||
Files.write(file.toPath(), gson.toJson(map).getBytes(), StandardOpenOption.CREATE);
|
||||
} catch (IOException e) {
|
||||
map = new HashMap<>();
|
||||
}
|
||||
cache.put(wiki, map);
|
||||
return map;
|
||||
}
|
||||
|
||||
protected Map<String, Integer> scrape(Wiki wiki) throws IOException {
|
||||
String url = wiki.url;
|
||||
String text = MainUtil.getText(url);
|
||||
HashMap<String, Integer> map = new HashMap<>();
|
||||
|
||||
if (wiki == Wiki.ENTITY_MAPPINGS) {
|
||||
String header = "{|";
|
||||
String footer = "|}";
|
||||
|
||||
|
||||
int headerIndex = text.indexOf(header);
|
||||
if (headerIndex == -1) return map;
|
||||
int endIndex = text.indexOf(footer, headerIndex);
|
||||
String part = text.substring(headerIndex, endIndex == -1 ? text.length() : endIndex);
|
||||
|
||||
for (String line : part.split("\n")) {
|
||||
if (line.startsWith("| {{")) {
|
||||
String[] split = line.split("\\|\\|");
|
||||
if (split.length == 5) {
|
||||
int id = Integer.parseInt(split[1].trim());
|
||||
String name = split[3].trim();
|
||||
map.put(name, id);
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
} else {
|
||||
String header = wiki == Wiki.ITEM_MAPPINGS_PE ? "=== Item IDs ===" : "{{";
|
||||
|
||||
int headerIndex = text.indexOf(header);
|
||||
if (headerIndex == -1) return map;
|
||||
String footer = "{{-}}";
|
||||
int endIndex = text.indexOf(footer, headerIndex);
|
||||
String part = text.substring(headerIndex, endIndex == -1 ? text.length() : endIndex);
|
||||
|
||||
int id = 255;
|
||||
String prefix = "{{id table|";
|
||||
for (String line : part.split("\n")) {
|
||||
String lower = line.toLowerCase();
|
||||
if (lower.startsWith(prefix)) {
|
||||
line = line.substring(prefix.length(), line.indexOf("}}"));
|
||||
String[] split = line.split("\\|");
|
||||
String nameId = null;
|
||||
for (String entry : split) {
|
||||
String[] pair = entry.split("=");
|
||||
switch (pair[0].toLowerCase()) {
|
||||
case "dv":
|
||||
id = Integer.parseInt(pair[1]);
|
||||
break;
|
||||
case "nameid":
|
||||
nameId = pair[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nameId == null) nameId = split[0].toLowerCase().replace(' ', '_');
|
||||
map.put(nameId, id);
|
||||
}
|
||||
id++;
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
}
|
@ -27,7 +27,6 @@ import com.sk89q.worldedit.util.formatting.text.TranslatableComponent;
|
||||
import com.boydti.fawe.config.Settings;
|
||||
import com.boydti.fawe.object.clipboard.MultiClipboardHolder;
|
||||
import com.boydti.fawe.object.clipboard.URIClipboardHolder;
|
||||
import com.boydti.fawe.object.clipboard.remap.ClipboardRemapper;
|
||||
import com.boydti.fawe.object.schematic.MinecraftStructure;
|
||||
import com.boydti.fawe.util.MainUtil;
|
||||
import com.boydti.fawe.util.MathMan;
|
||||
@ -189,22 +188,7 @@ public class SchematicCommands {
|
||||
}
|
||||
player.print(Caption.of("fawe.worldedit.clipboard.clipboard.uri.not.found" , fileName));
|
||||
}
|
||||
|
||||
@Command(
|
||||
name = "remap",
|
||||
desc = "Remap a clipboard between MCPE/PC values"
|
||||
)
|
||||
@Deprecated
|
||||
@CommandPermissions({"worldedit.schematic.remap"})
|
||||
public void remap(Player player, LocalSession session) throws WorldEditException {
|
||||
ClipboardRemapper remapper = new ClipboardRemapper(ClipboardRemapper.RemapPlatform.PE, ClipboardRemapper.RemapPlatform.PC);
|
||||
|
||||
for (Clipboard clip : session.getClipboard().getClipboards()) {
|
||||
remapper.apply(clip);
|
||||
}
|
||||
player.print("Remapped schematic");
|
||||
}
|
||||
|
||||
|
||||
@Command(
|
||||
name = "load",
|
||||
desc = "Load a schematic into your clipboard"
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren