public static String getModIdForEntity(Class<? extends Entity> entity){ if(reflectionFailed) return "minecraft"; if(entityNames == null) { try { entityNames = (HashMap<String, ModContainer>)ReflectionHelper.findField(EntityRegistry.class, "entityNames").get(EntityRegistry.instance()); } catch(Exception e) { IGWLog.warning("IGW-Mod failed to perform reflection! A result of this is that wiki pages related to Entities will not be found. Report to MineMaarten please!"); e.printStackTrace(); reflectionFailed = true; return "minecraft"; } } EntityRegistration entityReg = EntityRegistry.instance().lookupModSpawn(entity, true); if(entityReg == null) return "minecraft"; ModContainer mod = entityNames.get(entityReg.getEntityName()); if(mod == null) { IGWLog.info("Couldn't find the owning mod of the entity " + entityReg.getEntityName() + " even though it's registered through the EntityRegistry!"); return "minecraft"; } else { return mod.getModId().toLowerCase(); } }
public static Packet<?> getEntitySpawningPacket(Entity entity) { EntityRegistration er = EntityRegistry.instance().lookupModSpawn(entity.getClass(), false); if (er == null) { return null; } if (er.usesVanillaSpawning()) { return null; } return channelPair.get(Side.SERVER).generatePacketFrom(new FMLMessage.EntitySpawnMessage(er, entity, er.getContainer())); }
/** * Attempts to get the name of the mod which registered the entity. Minecraft will be * returned for vanilla content while Unknown will be used for invalid cases. * * @param entity The entity to get the mod name for. * @return The name of the mod which registered the entity. */ public static String getModName (Entity entity) { if (entity == null) return "Unknown"; final EntityRegistration reg = EntityRegistry.instance().lookupModSpawn(entity.getClass(), false); if (reg != null) { final ModContainer mod = reg.getContainer(); if (mod != null) return mod.getName(); return "Unknown"; } return "Minecraft"; }
public EntitySpawnMessage(EntityRegistration er, Entity entity, ModContainer modContainer) { super(entity); modId = modContainer.getModId(); modEntityTypeId = er.getModEntityId(); }
private void spawnEntity(FMLMessage.EntitySpawnMessage spawnMsg) { ModContainer mc = Loader.instance().getIndexedModList().get(spawnMsg.modId); EntityRegistration er = EntityRegistry.instance().lookupModSpawn(mc, spawnMsg.modEntityTypeId); if (er == null) { throw new RuntimeException( "Could not spawn mod entity ModID: " + spawnMsg.modId + " EntityID: " + spawnMsg.modEntityTypeId + " at ( " + spawnMsg.rawX + "," + spawnMsg.rawY + ", " + spawnMsg.rawZ + ") Please contact mod author or server admin."); } WorldClient wc = FMLClientHandler.instance().getWorldClient(); Class<? extends Entity> cls = er.getEntityClass(); try { Entity entity; if (er.hasCustomSpawning()) { entity = er.doCustomSpawning(spawnMsg); } else { entity = cls.getConstructor(World.class).newInstance(wc); int offset = spawnMsg.entityId - entity.getEntityId(); entity.setEntityId(spawnMsg.entityId); entity.setUniqueId(spawnMsg.entityUUID); entity.setLocationAndAngles(spawnMsg.rawX, spawnMsg.rawY, spawnMsg.rawZ, spawnMsg.scaledYaw, spawnMsg.scaledPitch); if (entity instanceof EntityLiving) { ((EntityLiving) entity).rotationYawHead = spawnMsg.scaledHeadYaw; } Entity parts[] = entity.getParts(); if (parts != null) { for (int j = 0; j < parts.length; j++) { parts[j].setEntityId(parts[j].getEntityId() + offset); } } } EntityTracker.updateServerPosition(entity, spawnMsg.rawX, spawnMsg.rawY, spawnMsg.rawZ); EntityPlayerSP clientPlayer = FMLClientHandler.instance().getClientPlayerEntity(); if (entity instanceof IThrowableEntity) { Entity thrower = clientPlayer.getEntityId() == spawnMsg.throwerId ? clientPlayer : wc.getEntityByID(spawnMsg.throwerId); ((IThrowableEntity) entity).setThrower(thrower); } if (spawnMsg.dataWatcherList != null) { entity.getDataManager().setEntryValues(spawnMsg.dataWatcherList); } if (spawnMsg.throwerId > 0) { entity.setVelocity(spawnMsg.speedScaledX, spawnMsg.speedScaledY, spawnMsg.speedScaledZ); } if (entity instanceof IEntityAdditionalSpawnData) { ((IEntityAdditionalSpawnData) entity).readSpawnData(spawnMsg.dataStream); } wc.addEntityToWorld(spawnMsg.entityId, entity); } catch (Exception e) { FMLLog.log(Level.ERROR, e, "A severe problem occurred during the spawning of an entity at ( " + spawnMsg.rawX + "," + spawnMsg.rawY + ", " + spawnMsg.rawZ +")"); throw Throwables.propagate(e); } }
/** * Gets the name of a mod that registered the entity. Due to Entity not using * IForgeRegistryEntry.Impl a special method is required. * * @param entity The entity to get the mod name for. * @return String The name of the mod that registered the entity. */ public static String getModName (Entity entity) { if (entity == null) { return "Unknown"; } final EntityRegistration reg = getRegistryInfo(entity); if (reg != null) { final ModContainer mod = reg.getContainer(); if (mod != null) { return mod.getName(); } return "Unknown"; } return "Minecraft"; }
/** * Gets registry info for an entity. * * @param entity The entity to get registry info of. * @return The entities registry info. Can be null. */ public static EntityRegistration getRegistryInfo (Entity entity) { return getRegistryInfo(entity.getClass()); }
/** * Gets registry info for an entity, from it's class. * * @param entity The class to look for. * @return The entities registry info. Can be null. */ public static EntityRegistration getRegistryInfo (Class<? extends Entity> entity) { return EntityRegistry.instance().lookupModSpawn(entity, false); }