Java源码示例:net.minecraft.item.ItemMonsterPlacer
示例1
/**
* Dispense the specified stack, play the dispense sound and spawn particles.
*/
public ItemStack dispenseStack(IBlockSource par1IBlockSource, ItemStack par2ItemStack)
{
EnumFacing enumfacing = BlockDispenser.func_149937_b/*getFacing*/(par1IBlockSource.getBlockMetadata());
double d0 = par1IBlockSource.getX() + (double)enumfacing.getFrontOffsetX();
double d1 = (double)((float)par1IBlockSource.getYInt() + 0.2F) + enumfacing.getFrontOffsetY();
double d2 = par1IBlockSource.getZ() + (double)enumfacing.getFrontOffsetZ();
Entity entity = ItemMonsterPlacer.spawnCreature(par1IBlockSource.getWorld(), par2ItemStack.getItemDamage(), d0, d1, d2);
if (entity instanceof EntityLiving && par2ItemStack.hasDisplayName())
{
((EntityLiving)entity).setCustomNameTag(par2ItemStack.getDisplayName());
}
par2ItemStack.splitStack(1);
return par2ItemStack;
}
示例2
/** Attempt to break the item on this itemstack into a type/variant/colour which we can use for communication with the Malmo platform.
* @param is the ItemStack containing the item we are attempting to deconstruct.
* @return an XML DrawItem object containing the item's type, variant, colour etc.
*/
public static DrawItem getDrawItemFromItemStack(ItemStack is)
{
if (is == null)
return null;
DrawItem di = new DrawItem();
String name = is.getUnlocalizedName(); // Get unlocalised name from the stack, not the stack's item - this ensures we keep the metadata.
if (is.getHasSubtypes())
{
// If the item has subtypes, then there are varieties - eg different colours, types, etc.
// Attempt to map from these subtypes back to variant/colour.
// Do this by decomposing the unlocalised name:
List<String> itemParts = new ArrayList<String>(Arrays.asList(name.split("\\.")));
if (is.getItem() instanceof ItemMonsterPlacer)
{
// Special case for eggs:
itemParts.add(ItemMonsterPlacer.getNamedIdFrom(is).toString());
}
// First part will be "tile" or "item".
// Second part will be the item itself (eg "dyePowder" or "stainedGlass" etc).
// Third part will be the variant, colour etc.
Colour col = null;
Variation var = null;
for (int part = 2; part < itemParts.size(); part++)
{
String section = itemParts.get(part);
// First see if this matches a colour:
if (col == null)
{
col = attemptToGetAsColour(section);
if (col == null && var == null) // If it wasn't a colour, check to see if it was a variant:
var = attemptToGetAsVariant(section, is);
}
else if (var == null)
var = attemptToGetAsVariant(section, is);
}
di.setColour(col);
di.setVariant(var);
}
// Use the item registry name for the item - this is what we use in Types.XSD
Object obj = Item.REGISTRY.getNameForObject(is.getItem());
String publicName;
if (obj instanceof ResourceLocation)
publicName = ((ResourceLocation)obj).getResourcePath();
else
publicName = obj.toString();
di.setType(publicName);
return di;
}
示例3
@Override
@SideOnly(Side.CLIENT)
public void displayAllRelevantItems(NonNullList<ItemStack> itemList) {
super.displayAllRelevantItems(itemList);
if (entityCache == null) {
entityCache = new ArrayList<>();
for (EntityEntry entityEntry : ForgeRegistries.ENTITIES.getValuesCollection()) {
if (entityEntry.getRegistryName().getNamespace().equalsIgnoreCase(CommunityGlobals.MOD_ID)) {
entityCache.add(entityEntry.getRegistryName());
}
}
}
for (final ResourceLocation id : entityCache) {
final ItemStack spawner = new ItemStack(Items.SPAWN_EGG);
ItemMonsterPlacer.applyEntityIdToItemStack(spawner, id);
itemList.add(spawner);
}
}