geforkt von Mirrors/FastAsyncWorldEdit
Fix some api compatibility issues
Dieser Commit ist enthalten in:
Ursprung
22511b2e19
Commit
55d34343dd
@ -77,7 +77,6 @@ subprojects {
|
||||
maven {url "https://mvnrepository.com/artifact/"}
|
||||
maven {url "http://repo.dmulloy2.net/content/groups/public/"}
|
||||
maven {url "https://repo.destroystokyo.com/repository/maven-public//"}
|
||||
maven {url "http://ci.emc.gs/nexus/content/groups/aikar/" }
|
||||
maven {url "http://ci.athion.net/job/PlotSquared/ws/mvn/"}
|
||||
maven {url "http://empcraft.com/maven2"}
|
||||
maven {url "https://hub.spigotmc.org/nexus/content/groups/public/"}
|
||||
@ -86,6 +85,7 @@ subprojects {
|
||||
maven {url "http://repo.spongepowered.org/maven"}
|
||||
maven {url "https://repo.inventivetalent.org/content/groups/public/"}
|
||||
maven {url "http://dl.bintray.com/tastybento/maven-repo"}
|
||||
maven {url "http://ci.emc.gs/nexus/content/groups/aikar/" }
|
||||
}
|
||||
|
||||
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||
|
@ -10,7 +10,7 @@ dependencies {
|
||||
compile project(':worldedit-core')
|
||||
compile 'com.sk89q:dummypermscompat:1.8'
|
||||
compile 'com.destroystokyo.paper:paper-api:1.13-R0.1-SNAPSHOT'
|
||||
compile "org.bukkit:craftbukkit:1.13-R0.1-SNAPSHOT"
|
||||
compile "org.spigotmc:spigot:1.13-R0.1-SNAPSHOT"
|
||||
testCompile 'org.mockito:mockito-core:1.9.0-rc1'
|
||||
compile 'net.milkbowl.vault:VaultAPI:1.5.6'
|
||||
compile 'com.massivecraft:factions:2.8.0'
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.sk89q.worldedit.bukkit;
|
||||
|
||||
import com.bekvon.bukkit.residence.commands.material;
|
||||
import com.sk89q.worldedit.registry.state.Property;
|
||||
import com.sk89q.worldedit.world.block.BlockState;
|
||||
import com.sk89q.worldedit.world.block.BlockStateHolder;
|
||||
@ -25,11 +26,14 @@ public class CachedBukkitAdapter {
|
||||
blockTypes = new BlockTypes[materials.length];
|
||||
for (int i = 0; i < materials.length; i++) {
|
||||
Material material = materials[i];
|
||||
if (material.isBlock() && !material.isLegacy()) {
|
||||
NamespacedKey key = material.getKey();
|
||||
blockTypes[i] = BlockTypes.get(key.getNamespace() + ":" + key.getKey());
|
||||
} else if (material.isItem() && !material.isLegacy()) {
|
||||
itemTypes[i] = ItemTypes.get(material.getKey().toString());
|
||||
if (material.isLegacy()) continue;
|
||||
NamespacedKey key = material.getKey();
|
||||
String id = key.getNamespace() + ":" + key.getKey();
|
||||
if (material.isBlock()) {
|
||||
blockTypes[i] = BlockTypes.get(id);
|
||||
}
|
||||
if (material.isItem()) {
|
||||
itemTypes[i] = ItemTypes.get(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ import com.sk89q.worldedit.registry.state.PropertyKey;
|
||||
import com.sk89q.worldedit.util.Direction;
|
||||
import com.sk89q.worldedit.world.block.*;
|
||||
import com.sk89q.worldedit.world.entity.EntityTypes;
|
||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
||||
import com.sk89q.worldedit.world.registry.LegacyMapper;
|
||||
import net.jpountz.lz4.LZ4BlockInputStream;
|
||||
import net.jpountz.lz4.LZ4BlockOutputStream;
|
||||
@ -148,48 +149,18 @@ public class SchematicStreamer extends NBTStreamer {
|
||||
if (fc == null) {
|
||||
setupClipboard(0);
|
||||
}
|
||||
String id = convertEntityId(compound.getString("id"));
|
||||
String id = compound.getString("id");
|
||||
if (id.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
ListTag positionTag = compound.getListTag("Pos");
|
||||
ListTag directionTag = compound.getListTag("Rotation");
|
||||
BaseEntity state = new BaseEntity(EntityTypes.get(id), compound);
|
||||
BaseEntity state = new BaseEntity(EntityTypes.parse(id), compound);
|
||||
fc.createEntity(clipboard, positionTag.asDouble(0), positionTag.asDouble(1), positionTag.asDouble(2), (float) directionTag.asDouble(0), (float) directionTag.asDouble(1), state);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private String convertEntityId(String id) {
|
||||
switch(id) {
|
||||
case "xp_orb":
|
||||
return "experience_orb";
|
||||
case "xp_bottle":
|
||||
return "experience_bottle";
|
||||
case "eye_of_ender_signal":
|
||||
return "eye_of_ender";
|
||||
case "ender_crystal":
|
||||
return "end_crystal";
|
||||
case "fireworks_rocket":
|
||||
return "firework_rocket";
|
||||
case "commandblock_minecart":
|
||||
return "command_block_minecart";
|
||||
case "snowman":
|
||||
return "snow_golem";
|
||||
case "villager_golem":
|
||||
return "iron_golem";
|
||||
case "evocation_fangs":
|
||||
return "evoker_fangs";
|
||||
case "evocation_illager":
|
||||
return "evoker";
|
||||
case "vindication_illager":
|
||||
return "vindicator";
|
||||
case "illusion_illager":
|
||||
return "illusioner";
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFully() throws IOException {
|
||||
super.readFully();
|
||||
|
@ -22,7 +22,7 @@ package com.sk89q.worldedit;
|
||||
/**
|
||||
* Parent for all WorldEdit exceptions.
|
||||
*/
|
||||
public abstract class WorldEditException extends Exception {
|
||||
public abstract class WorldEditException extends RuntimeException {
|
||||
|
||||
/**
|
||||
* Create a new exception.
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package com.sk89q.worldedit.extension.factory;
|
||||
|
||||
import com.boydti.fawe.util.MathMan;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.blocks.BaseItem;
|
||||
import com.sk89q.worldedit.extension.input.InputParseException;
|
||||
@ -26,6 +27,7 @@ import com.sk89q.worldedit.extension.input.ParserContext;
|
||||
import com.sk89q.worldedit.extension.platform.Capability;
|
||||
import com.sk89q.worldedit.internal.registry.InputParser;
|
||||
import com.sk89q.worldedit.world.item.ItemType;
|
||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
||||
import com.sk89q.worldedit.world.registry.LegacyMapper;
|
||||
|
||||
public class DefaultItemParser extends InputParser<BaseItem> {
|
||||
@ -44,8 +46,17 @@ public class DefaultItemParser extends InputParser<BaseItem> {
|
||||
ItemType type;
|
||||
if (split.length == 1) {
|
||||
type = LegacyMapper.getInstance().getItemFromLegacy(Integer.parseInt(split[0]));
|
||||
} else {
|
||||
} else if (MathMan.isInteger(split[0])) {
|
||||
type = LegacyMapper.getInstance().getItemFromLegacy(Integer.parseInt(split[0]), Integer.parseInt(split[1]));
|
||||
} else {
|
||||
type = ItemTypes.parse(input);
|
||||
if (type != null) {
|
||||
Integer legacy = LegacyMapper.getInstance().getLegacyCombined(type);
|
||||
if (legacy != null) {
|
||||
ItemTypes newType = LegacyMapper.getInstance().getItemFromLegacy(legacy >> 4, Integer.parseInt(split[1]));
|
||||
if (newType != null) type = newType;
|
||||
}
|
||||
}
|
||||
}
|
||||
item = new BaseItem(type);
|
||||
} catch (NumberFormatException e) {
|
||||
|
@ -150,8 +150,15 @@ public interface BlockType extends FawePattern, Comparable<BlockTypes> {
|
||||
*/
|
||||
BlockMaterial getMaterial();
|
||||
|
||||
/**
|
||||
* Gets the legacy ID. Needed for legacy reasons.
|
||||
*
|
||||
* DO NOT USE THIS.
|
||||
*
|
||||
* @return legacy id or 0, if unknown
|
||||
*/
|
||||
default int getLegacyCombinedId() {
|
||||
Integer combinedId = LegacyMapper.getInstance().getLegacyFromBlock(this);
|
||||
Integer combinedId = LegacyMapper.getInstance().getLegacyCombined(this);
|
||||
return combinedId == null ? 0 : combinedId;
|
||||
}
|
||||
|
||||
@ -169,4 +176,14 @@ public interface BlockType extends FawePattern, Comparable<BlockTypes> {
|
||||
|
||||
@Override
|
||||
int hashCode();
|
||||
|
||||
@Deprecated
|
||||
default int getLegacyId() {
|
||||
Integer id = LegacyMapper.getInstance().getLegacyCombined(this.getDefaultState());
|
||||
if (id != null) {
|
||||
return id >> 4;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -122,12 +122,81 @@ public class EntityTypes {
|
||||
private EntityTypes() {
|
||||
}
|
||||
|
||||
public static EntityType parse(String id) {
|
||||
if (id.startsWith("minecraft:")) id = id.substring(10);
|
||||
switch (id) {
|
||||
case "FallingSand": return EntityTypes.FALLING_BLOCK;
|
||||
case "FireworksRocketEntity": return EntityTypes.FIREWORK_ROCKET;
|
||||
case "LavaSlime": return EntityTypes.MAGMA_CUBE;
|
||||
case "MinecartChest": return EntityTypes.CHEST_MINECART;
|
||||
case "MinecartCommandBlock": return EntityTypes.COMMAND_BLOCK_MINECART;
|
||||
case "MinecartFurnace": return EntityTypes.FURNACE_MINECART;
|
||||
case "MinecartHopper": return EntityTypes.HOPPER_MINECART;
|
||||
case "MinecartRideable": return EntityTypes.MINECART;
|
||||
case "MinecartSpawner": return EntityTypes.SPAWNER_MINECART;
|
||||
case "MinecartTNT": return EntityTypes.TNT_MINECART;
|
||||
case "MushroomCow": return EntityTypes.MOOSHROOM;
|
||||
case "PigZombie": return EntityTypes.ZOMBIE_PIGMAN;
|
||||
case "PrimedTnt": return EntityTypes.TNT;
|
||||
case "SnowMan": return EntityTypes.SNOW_GOLEM;
|
||||
case "ThrownEgg": return EntityTypes.EGG;
|
||||
case "ThrownEnderpearl": return EntityTypes.ENDER_PEARL;
|
||||
case "ThrownExpBottle": return EntityTypes.EXPERIENCE_BOTTLE;
|
||||
case "ThrownPotion": return EntityTypes.POTION;
|
||||
case "WitherBoss": return EntityTypes.WITHER;
|
||||
case "XPOrb": return EntityTypes.EXPERIENCE_ORB;
|
||||
default:
|
||||
if (Character.isUpperCase(id.charAt(0))) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
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);
|
||||
}
|
||||
return parse(result.toString());
|
||||
}
|
||||
switch (id.toLowerCase()) {
|
||||
case "xp_orb":
|
||||
return EntityTypes.EXPERIENCE_ORB;
|
||||
case "xp_bottle":
|
||||
return EntityTypes.EXPERIENCE_BOTTLE;
|
||||
case "eye_of_ender_signal":
|
||||
return EntityTypes.EYE_OF_ENDER;
|
||||
case "ender_crystal":
|
||||
return EntityTypes.END_CRYSTAL;
|
||||
case "fireworks_rocket":
|
||||
return EntityTypes.FIREWORK_ROCKET;
|
||||
case "commandblock_minecart":
|
||||
return EntityTypes.COMMAND_BLOCK_MINECART;
|
||||
case "snowman":
|
||||
return EntityTypes.SNOW_GOLEM;
|
||||
case "villager_golem":
|
||||
return EntityTypes.IRON_GOLEM;
|
||||
case "evocation_fangs":
|
||||
return EntityTypes.EVOKER_FANGS;
|
||||
case "evocation_illager":
|
||||
return EntityTypes.EVOKER;
|
||||
case "vindication_illager":
|
||||
return EntityTypes.VINDICATOR;
|
||||
case "illusion_illager":
|
||||
return EntityTypes.ILLUSIONER;
|
||||
default:
|
||||
return get(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static EntityType register(final String id) {
|
||||
return register(new EntityType(id));
|
||||
}
|
||||
|
||||
public static EntityType register(final EntityType entityType) {
|
||||
return EntityType.REGISTRY.register(entityType.getId(), entityType);
|
||||
String id = entityType.getId();
|
||||
if (id.startsWith("minecraft:")) EntityType.REGISTRY.register(id.substring(10), entityType);
|
||||
return EntityType.REGISTRY.register(id, entityType);
|
||||
}
|
||||
|
||||
public static @Nullable EntityType get(final String id) {
|
||||
|
@ -957,7 +957,8 @@ public enum ItemTypes implements ItemType {
|
||||
|
||||
private static ItemTypes register(final String id) {
|
||||
// Get the enum name (remove namespace if minecraft:)
|
||||
String typeName = id.substring(0, Math.max(id.indexOf('['), id.length()));
|
||||
int propStart = id.indexOf('[');
|
||||
String typeName = id.substring(0, propStart == -1 ? id.length() : propStart);
|
||||
String enumName = (typeName.startsWith("minecraft:") ? typeName.substring(10) : typeName).toUpperCase();
|
||||
// Check existing
|
||||
ItemTypes existing = valueOf(enumName.toUpperCase());
|
||||
@ -967,6 +968,7 @@ public enum ItemTypes implements ItemType {
|
||||
// Create it
|
||||
existing = ReflectionUtils.addEnum(ItemTypes.class, enumName, new Class[]{String.class}, new Object[]{id});
|
||||
}
|
||||
if (typeName.startsWith("minecraft:")) $REGISTRY.put(typeName.substring(10), existing);
|
||||
$REGISTRY.put(typeName, existing);
|
||||
return existing;
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.blocks.BaseItem;
|
||||
import com.sk89q.worldedit.registry.state.PropertyKey;
|
||||
import com.sk89q.worldedit.world.block.BlockState;
|
||||
import com.sk89q.worldedit.world.block.BlockStateHolder;
|
||||
@ -150,10 +151,16 @@ public class LegacyMapper {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getLegacyFromItem(ItemType itemType) {
|
||||
public Integer getLegacyCombined(ItemType itemType) {
|
||||
return itemMap.inverse().get(itemType);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public int[] getLegacyFromItem(ItemType itemType) {
|
||||
Integer combinedId = getLegacyCombined(itemType);
|
||||
return combinedId == null ? null : new int[] { combinedId >> 4, combinedId & 0xF };
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public BlockState getBlockFromLegacy(int legacyId) {
|
||||
return getBlock(legacyId << 4);
|
||||
@ -190,17 +197,23 @@ public class LegacyMapper {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getLegacyFromBlock(BlockState blockState) {
|
||||
public Integer getLegacyCombined(BlockState blockState) {
|
||||
Integer result = blockStateToLegacyId4Data.get(blockState.getInternalId());
|
||||
if (result == null) result = blockStateToLegacyId4Data.get(blockState.getInternalBlockTypeId());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Integer getLegacyFromBlock(BlockType type) {
|
||||
public Integer getLegacyCombined(BlockType type) {
|
||||
return blockStateToLegacyId4Data.get(type.getDefaultState());
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public int[] getLegacyFromBlock(BlockState blockState) {
|
||||
Integer combinedId = getLegacyCombined(blockState);
|
||||
return combinedId == null ? null : new int[] { combinedId >> 4, combinedId & 0xF };
|
||||
}
|
||||
|
||||
public static LegacyMapper getInstance() {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = new LegacyMapper();
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren