+ * This modifier will automatically marshall between Material and the
+ * internal Minecraft Block.
+ * @return A modifier for GameProfile fields.
+ */
+ public StructureModifier getBlocks() {
+ // Convert to and from the Bukkit wrapper
+ return structureModifier.withType(
+ MinecraftReflection.getBlockClass(), BukkitConverters.getBlockConverter());
+ }
+
/**
* Retrieves a read/write structure for game profiles in Minecraft 1.7.2.
*
@@ -526,7 +542,7 @@ public class PacketContainer implements Serializable {
}
/**
- * Retrieve a read/write structure for the Protocol enum.
+ * Retrieve a read/write structure for the Protocol enum in 1.7.2.
* @return A modifier for Protocol enum fields.
*/
public StructureModifier getProtocols() {
@@ -536,7 +552,7 @@ public class PacketContainer implements Serializable {
}
/**
- * Retrieve a read/write structure for the ClientCommand enum.
+ * Retrieve a read/write structure for the ClientCommand enum in 1.7.2.
* @return A modifier for ClientCommand enum fields.
*/
public StructureModifier getClientCommands() {
@@ -546,7 +562,7 @@ public class PacketContainer implements Serializable {
}
/**
- * Retrieve a read/write structure for the ChatVisibility enum.
+ * Retrieve a read/write structure for the ChatVisibility enum in 1.7.2.
* @return A modifier for ChatVisibility enum fields.
*/
public StructureModifier getChatVisibilities() {
@@ -556,7 +572,7 @@ public class PacketContainer implements Serializable {
}
/**
- * Retrieve a read/write structure for the Difficulty enum.
+ * Retrieve a read/write structure for the Difficulty enum in 1.7.2.
* @return A modifier for Difficulty enum fields.
*/
public StructureModifier getDifficulties() {
@@ -566,7 +582,7 @@ public class PacketContainer implements Serializable {
}
/**
- * Retrieve a read/write structure for the EntityUse enum.
+ * Retrieve a read/write structure for the EntityUse enum in 1.7.2.
* @return A modifier for EntityUse enum fields.
*/
public StructureModifier getEntityUseActions() {
@@ -576,7 +592,7 @@ public class PacketContainer implements Serializable {
}
/**
- * Retrieve a read/write structure for the NativeGameMode enum.
+ * Retrieve a read/write structure for the NativeGameMode enum in 1.7.2.
* @return A modifier for NativeGameMode enum fields.
*/
public StructureModifier getGamemodes() {
diff --git a/ProtocolLib/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java b/ProtocolLib/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java
index ffb26d27..9b6fbee1 100644
--- a/ProtocolLib/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java
+++ b/ProtocolLib/src/main/java/com/comphenix/protocol/wrappers/BukkitConverters.java
@@ -21,12 +21,14 @@ import java.lang.ref.WeakReference;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.WorldType;
import org.bukkit.entity.Entity;
@@ -35,7 +37,6 @@ import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import com.comphenix.protocol.PacketType;
-import com.comphenix.protocol.PacketType.Protocol;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.injector.PacketConstructor;
@@ -44,6 +45,9 @@ import com.comphenix.protocol.reflect.EquivalentConverter;
import com.comphenix.protocol.reflect.FieldAccessException;
import com.comphenix.protocol.reflect.FuzzyReflection;
import com.comphenix.protocol.reflect.StructureModifier;
+import com.comphenix.protocol.reflect.accessors.Accessors;
+import com.comphenix.protocol.reflect.accessors.MethodAccessor;
+import com.comphenix.protocol.reflect.fuzzy.FuzzyMethodContract;
import com.comphenix.protocol.reflect.instances.DefaultInstances;
import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.nbt.NbtBase;
@@ -73,6 +77,10 @@ public class BukkitConverters {
private static Method worldTypeName;
private static Method worldTypeGetType;
+ // Used to get block instances
+ private static MethodAccessor GET_BLOCK;
+ private static MethodAccessor GET_BLOCK_ID;
+
// Used for potion effect conversion
private static volatile Constructor> mobEffectConstructor;
private static volatile StructureModifier