return new WrappedDataWatcherObject(id, serializer);
.banModifier(Modifier.STATIC) .requireModifier(Modifier.PUBLIC) .parameterExactArray(object.getHandleType(), Object.class) .build(); List<Method> methods = fuzzy.getMethodList(contract); if (hasIndex(object.getIndex())) { SETTER.invoke(handle, object.getHandle(), value); } else { object.checkSerializer(); REGISTER.invoke(handle, object.getHandle(), value); getWatchableObject(object.getIndex()).setDirtyState(update);
/** * Sets the DataWatcher Item at a given index to a new value. In 1.9 and up, * you cannot register objects without a watcher object. * * @param index Index of the object to set * @param value New value * @param update Whether or not to inform the client * * @see {@link #setObject(WrappedDataWatcherObject, Object, boolean)} * @throws IllegalArgumentException in 1.9 and up if there isn't already an * object at this index */ public void setObject(int index, Object value, boolean update) { if (MinecraftReflection.watcherObjectExists() && !hasIndex(index)) { throw new IllegalArgumentException("You cannot register objects without a watcher object!"); } setObject(WrappedDataWatcherObject.fromIndex(index), value, update); }
newWatcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(MetaIndex.ENTITY_META.getIndex(), WrappedDataWatcher.Registry.get(Byte.class)), (byte) 32);
dataWatcher.setObject(new WrappedDataWatcherObject(itemstackMetadataWatcherIndex, itemSerializer), itemStackObject); dataWatcher.setObject(new WrappedDataWatcherObject(1, intSerializer), 300); dataWatcher.setObject(new WrappedDataWatcherObject(0, byteSerializer), (byte) 0); } else { dataWatcher.setObject(itemstackMetadataWatcherIndex, itemLine.getNmsItem().getRawItemStack());
/** * Retrieve a watchable object by watcher object. * * @param object The watcher object * @return The watched object or null if it doesn't exist. */ public Object getObject(WrappedDataWatcherObject object) { Validate.notNull(object, "Watcher object cannot be null!"); if (GETTER == null) { FuzzyReflection fuzzy = FuzzyReflection.fromClass(handleType, true); if (MinecraftReflection.watcherObjectExists()) { GETTER = Accessors.getMethodAccessor(fuzzy.getMethod(FuzzyMethodContract.newBuilder() .parameterExactType(object.getHandleType()) .returnTypeExact(Object.class) .build(), "get")); } else { GETTER = Accessors.getMethodAccessor(fuzzy.getMethod(FuzzyMethodContract.newBuilder() .parameterExactType(int.class) .returnTypeExact(MinecraftReflection.getDataWatcherItemClass()) .build())); } } try { Object value = GETTER.invoke(handle, object.getHandle()); return WrappedWatchableObject.getWrapped(value); } catch (Exception ex) { // Nothing exists at this index return null; } }
WrappedDataWatcher dataWatcher = new WrappedDataWatcher(); dataWatcher.setObject(new WrappedDataWatcherObject(0, byteSerializer), (byte) 0x20); // Entity status: invisible dataWatcher.setObject(new WrappedDataWatcherObject(customNameWatcherIndex, chatComponentSerializer), Optional.of(WrappedChatComponent.fromText(customName).getHandle())); } else { dataWatcher.setObject(new WrappedDataWatcherObject(customNameWatcherIndex, stringSerializer), customName); dataWatcher.setObject(new WrappedDataWatcherObject(3, booleanSerializer), true); // Custom name visible dataWatcher.setObject(new WrappedDataWatcherObject(5, booleanSerializer), true); // No gravity dataWatcher.setObject(new WrappedDataWatcherObject(11, byteSerializer), (byte) (0x01 | 0x08 | 0x10)); // Armor stand data: small, no base plate, marker
/** * This creates a DataWatcherItem usable with WrappedWatchableObject * * @param id * @param value * @return */ public static Object createDataWatcherItem(int id, Object value) { WrappedDataWatcherObject watcherObject = createDataWatcherObject(id, value); Constructor construct = getNmsConstructor("DataWatcher$Item", getNmsClass("DataWatcherObject"), Object.class); try { return construct.newInstance(watcherObject.getHandle(), convertInvalidMeta(value)); } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } return null; }
private static WrappedDataWatcher.WrappedDataWatcherObject toWatcherObject(int index, WrappedDataWatcher.Serializer serializer) { return new WrappedDataWatcher.WrappedDataWatcherObject(index, serializer); }
/** * Sets the DataWatcher Item at a given index to a new value. * * @param index Index of the object to set * @param serializer Serializer from {@link Registry#get(Class)} * @param value New value * @param update Whether or not to inform the client * * @see {@link #setObject(WrappedDataWatcherObject, Object)} */ public void setObject(int index, Serializer serializer, Object value, boolean update) { setObject(new WrappedDataWatcherObject(index, serializer), value, update); }
private static WrappedDataWatcher.WrappedDataWatcherObject toWatcherObject(int index, WrappedDataWatcher.Serializer serializer) { return new WrappedDataWatcher.WrappedDataWatcherObject(index, serializer); }
@Override public String toString() { return "DataWatcherObject[index=" + getIndex() + ", serializer=" + getSerializer() + "]"; }
/** * Retrieve a watchable object by index. * * @param index Index of the object to retrieve. * @return The watched object or null if it doesn't exist. */ public Object getObject(int index) { return getObject(WrappedDataWatcherObject.fromIndex(index)); }
/** * Gets this Item's index from the watcher object * @return The index */ public int getIndex() { if (MinecraftReflection.watcherObjectExists()) { return getWatcherObject().getIndex(); } return modifier.<Integer>withType(int.class).read(1); }
public void checkSerializer() { Validate.notNull(getSerializer(), "You must specify a serializer to register an object!"); }
static WrappedDataWatcherObject fromIndex(int index) { if (MinecraftReflection.watcherObjectExists()) { return new WrappedDataWatcherObject(newHandle(index)); } else { return new DummyWatcherObject(index); } }
/** * Alias for {@link #setObject(int, Serializer, Object, boolean)} */ public void setObject(int index, Serializer serializer, Object value) { setObject(new WrappedDataWatcherObject(index, serializer), value, false); }
/** * Constructs a DataWatcher Item wrapper from a given index and initial value. * <p> * Not recommended in 1.9 and up. * @param index Index of the Item * @param value Initial value */ public WrappedWatchableObject(int index, Object value) { this(newHandle(WrappedDataWatcherObject.fromIndex(index), value)); }
/** * Gets this Item's watcher object, which contains the index and serializer. * @return The watcher object */ public WrappedDataWatcherObject getWatcherObject() { return new WrappedDataWatcherObject(modifier.read(0)); }
private static Object newHandle(WrappedDataWatcherObject watcherObject, Object value) { if (constructor == null) { constructor = Accessors.getConstructorAccessor(HANDLE_TYPE.getConstructors()[0]); } if (MinecraftReflection.watcherObjectExists()) { return constructor.invoke(watcherObject.getHandle(), value); } else { // new WatchableObject(classId, index, value) return constructor.invoke(WrappedDataWatcher.getTypeID(value.getClass()), watcherObject.getIndex(), value); } }