Skip to content

Commit a995866

Browse files
committed
Add block data to the cloning mechanism
1 parent a88347d commit a995866

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

modules/API/src/main/java/com/comphenix/protocol/reflect/cloning/BukkitCloner.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.comphenix.protocol.wrappers.BukkitConverters;
2626
import com.comphenix.protocol.wrappers.ChunkPosition;
2727
import com.comphenix.protocol.wrappers.MinecraftKey;
28+
import com.comphenix.protocol.wrappers.WrappedBlockData;
2829
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
2930
import com.comphenix.protocol.wrappers.WrappedServerPing;
3031
import com.google.common.collect.Maps;
@@ -61,6 +62,11 @@ public BukkitCloner() {
6162
addClass(5, MinecraftReflection.getDataWatcherSerializerClass());
6263
addClass(6, MinecraftReflection.getMinecraftKeyClass());
6364
}
65+
66+
try {
67+
addClass(7, MinecraftReflection.getIBlockDataClass());
68+
} catch (Throwable ex) {
69+
}
6470
}
6571

6672
private void addClass(int id, Class<?> clazz) {
@@ -112,7 +118,10 @@ public Object clone(Object source) {
112118
return source;
113119
case 6:
114120
EquivalentConverter<MinecraftKey> keyConverter = MinecraftKey.getConverter();
115-
return keyConverter.getGeneric(clonableClasses.get(5), keyConverter.getSpecific(source));
121+
return keyConverter.getGeneric(clonableClasses.get(6), keyConverter.getSpecific(source));
122+
case 7:
123+
EquivalentConverter<WrappedBlockData> blockDataConverter = BukkitConverters.getWrappedBlockDataConverter();
124+
return blockDataConverter.getGeneric(clonableClasses.get(7), blockDataConverter.getSpecific(source).deepClone());
116125
default:
117126
throw new IllegalArgumentException("Cannot clone objects of type " + source.getClass());
118127
}

modules/API/src/main/java/com/comphenix/protocol/wrappers/WrappedBlockData.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ public static WrappedBlockData createData(Material type, int data) {
149149
return new WrappedBlockData(blockData);
150150
}
151151

152+
/**
153+
* Retrieve a deep copy of the current wrapper object.
154+
* @return The cloned object.
155+
*/
156+
public WrappedBlockData deepClone() {
157+
return WrappedBlockData.createData(getType(), getData());
158+
}
159+
152160
@Override
153161
public String toString() {
154162
return "WrappedBlockData[handle=" + handle + "]";

0 commit comments

Comments
 (0)