Add block data to the cloning mechanism
Dieser Commit ist enthalten in:
Ursprung
a88347dfe6
Commit
a995866d5b
@ -25,6 +25,7 @@ import com.comphenix.protocol.wrappers.BlockPosition;
|
|||||||
import com.comphenix.protocol.wrappers.BukkitConverters;
|
import com.comphenix.protocol.wrappers.BukkitConverters;
|
||||||
import com.comphenix.protocol.wrappers.ChunkPosition;
|
import com.comphenix.protocol.wrappers.ChunkPosition;
|
||||||
import com.comphenix.protocol.wrappers.MinecraftKey;
|
import com.comphenix.protocol.wrappers.MinecraftKey;
|
||||||
|
import com.comphenix.protocol.wrappers.WrappedBlockData;
|
||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
||||||
import com.comphenix.protocol.wrappers.WrappedServerPing;
|
import com.comphenix.protocol.wrappers.WrappedServerPing;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
@ -61,6 +62,11 @@ public class BukkitCloner implements Cloner {
|
|||||||
addClass(5, MinecraftReflection.getDataWatcherSerializerClass());
|
addClass(5, MinecraftReflection.getDataWatcherSerializerClass());
|
||||||
addClass(6, MinecraftReflection.getMinecraftKeyClass());
|
addClass(6, MinecraftReflection.getMinecraftKeyClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
addClass(7, MinecraftReflection.getIBlockDataClass());
|
||||||
|
} catch (Throwable ex) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addClass(int id, Class<?> clazz) {
|
private void addClass(int id, Class<?> clazz) {
|
||||||
@ -112,7 +118,10 @@ public class BukkitCloner implements Cloner {
|
|||||||
return source;
|
return source;
|
||||||
case 6:
|
case 6:
|
||||||
EquivalentConverter<MinecraftKey> keyConverter = MinecraftKey.getConverter();
|
EquivalentConverter<MinecraftKey> keyConverter = MinecraftKey.getConverter();
|
||||||
return keyConverter.getGeneric(clonableClasses.get(5), keyConverter.getSpecific(source));
|
return keyConverter.getGeneric(clonableClasses.get(6), keyConverter.getSpecific(source));
|
||||||
|
case 7:
|
||||||
|
EquivalentConverter<WrappedBlockData> blockDataConverter = BukkitConverters.getWrappedBlockDataConverter();
|
||||||
|
return blockDataConverter.getGeneric(clonableClasses.get(7), blockDataConverter.getSpecific(source).deepClone());
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Cannot clone objects of type " + source.getClass());
|
throw new IllegalArgumentException("Cannot clone objects of type " + source.getClass());
|
||||||
}
|
}
|
||||||
|
@ -149,6 +149,14 @@ public class WrappedBlockData extends AbstractWrapper {
|
|||||||
return new WrappedBlockData(blockData);
|
return new WrappedBlockData(blockData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a deep copy of the current wrapper object.
|
||||||
|
* @return The cloned object.
|
||||||
|
*/
|
||||||
|
public WrappedBlockData deepClone() {
|
||||||
|
return WrappedBlockData.createData(getType(), getData());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "WrappedBlockData[handle=" + handle + "]";
|
return "WrappedBlockData[handle=" + handle + "]";
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren