Skip to content

Instantly share code, notes, and snippets.

@crast
Created March 21, 2013 15:54
Show Gist options
  • Save crast/5214134 to your computer and use it in GitHub Desktop.
Save crast/5214134 to your computer and use it in GitHub Desktop.
class CraftServer {
/** etc */
public boolean registerPlayerMetadataProvider(String metadataKey, MetadataProvider<OfflinePlayer> provider) {
return playerMetadata.registerProvider(metadataKey, provider);
}
public boolean registerWorldMetadataProvider(String metadataKey, MetadataProvider<World> provider) {
return worldMetadata.registerProvider(metadataKey, provider);
}
public boolean registerEntityMetadataProvider(String metadataKey, MetadataProvider<Entity> provider) {
return entityMetadata.registerProvider(metadataKey, provider);
}
}
class CraftWorld {
/** etc */
public boolean registerBlockMetadataProvider(String metadataKey, MetadataProvider<Block> provider) {
return blockMetadata.registerProvider(metadataKey, provider);
}
}
class CraftServer {
/** etc */
public <T> boolean registerMetadataProvider(String metadataKey, MetadataProvider<T> provider, Class<T> clazz) {
if (OfflinePlayer.class.isAssignableFrom(clazz)) {
return playerMetadata.registerProvider(metadataKey, (MetadataProvider<OfflinePlayer>) provider);
} else if (Entity.class.isAssignableFrom(clazz)) {
return entityMetadata.registerProvider(metadataKey, (MetadataProvider<Entity>) provider);
} else if (World.class.isAssignableFrom(clazz)) {
return worldMetadata.registerProvider(metadataKey, (MetadataProvider<World>) provider);
} else if (Block.class.isAssignableFrom(clazz)) {
// TODO: how do we handle the block Case, since there's a storage per-world?
return false;
} else {
throw new UnsupportedOperationException("Cannot determine type of metadata provider.");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment