diff options
9 files changed, 130 insertions, 34 deletions
diff --git a/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockSpawner.java b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockSpawner.java new file mode 100644 index 0000000000..53c9cdb193 --- /dev/null +++ b/src/Java/gtPlusPlus/core/item/base/itemblock/ItemBlockSpawner.java @@ -0,0 +1,39 @@ +package gtPlusPlus.core.item.base.itemblock; + +import java.util.List; + +import cpw.mods.fml.common.registry.EntityRegistry; +import cpw.mods.fml.common.registry.EntityRegistry.EntityRegistration; +import gtPlusPlus.plugin.villagers.tile.TileEntityGenericSpawner; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ItemBlockSpawner extends ItemBlockMeta{ + + private final Block mBlock; + + public ItemBlockSpawner(Block aBlock) { + super(aBlock); + mBlock = aBlock; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aBool) { + if (mBlock != null) { + int x = this.getMetadata(aStack.getItemDamage()); + if (x >= 0) { + try { + EntityRegistration x1 = EntityRegistry.instance().lookupModSpawn(TileEntityGenericSpawner.mSpawners.get(x), false); + if (x1 != null) { + aList.add(EnumChatFormatting.RED+x1.getEntityName()); + } + } + catch (Throwable t) {} + } + } + super.addInformation(aStack, aPlayer, aList, aBool); + } + +} diff --git a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java index d8218d9249..b1e763c384 100644 --- a/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java +++ b/src/Java/gtPlusPlus/core/tileentities/ModTileEntities.java @@ -6,6 +6,7 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.lib.LoadedMods; import gtPlusPlus.core.tileentities.general.*; import gtPlusPlus.core.tileentities.machines.*; +import gtPlusPlus.plugin.villagers.tile.TileEntityGenericSpawner; public class ModTileEntities { @@ -21,6 +22,7 @@ public class ModTileEntities { GameRegistry.registerTileEntity(TileEntityTradeTable.class, "TileTradeTable"); GameRegistry.registerTileEntity(TileEntityModularityTable.class, "TileEntityModularityTable"); GameRegistry.registerTileEntity(TileEntityXpConverter.class, "TileEntityXpConverter"); + GameRegistry.registerTileEntity(TileEntityGenericSpawner.class, "TileEntityGenericSpawner"); //Mod TEs diff --git a/src/Java/gtPlusPlus/core/util/Utils.java b/src/Java/gtPlusPlus/core/util/Utils.java index 7f9aa7098b..2dd4517f79 100644 --- a/src/Java/gtPlusPlus/core/util/Utils.java +++ b/src/Java/gtPlusPlus/core/util/Utils.java @@ -830,25 +830,26 @@ public class Utils { } } - public static void createNewMobSpawner(int aID, Entity aEntity) { + public static boolean createNewMobSpawner(int aID, Entity aEntity) { Class<Entity> c; if (aEntity instanceof Entity) { c = (Class<Entity>) aEntity.getClass(); - createNewMobSpawner(aID, c); + return createNewMobSpawner(aID, c); } + return false; } - public static void createNewMobSpawner(int aID, Class aEntity) { + public static boolean createNewMobSpawner(int aID, Class aEntity) { Logger.INFO("[Spawn] Generating new spawner for entity with class ("+aEntity.getCanonicalName()+")."); if (TileEntityGenericSpawner.registerNewMobSpawner(aID, aEntity)) { EntityRegistration x = EntityRegistry.instance().lookupModSpawn(aEntity, false); if (x != null) { Logger.INFO("[Spawn] Registration for "+x.getEntityName()+" successful"); + return true; } } - else { - Logger.INFO("[Spawn] Registration for "+aEntity.getName()+" failed"); - } + Logger.INFO("[Spawn] Mob Spawner creation for "+aEntity.getName()+" failed"); + return false; } } diff --git a/src/Java/gtPlusPlus/plugin/villagers/Core_VillagerAdditions.java b/src/Java/gtPlusPlus/plugin/villagers/Core_VillagerAdditions.java index ee0673ee20..09ff48aff5 100644 --- a/src/Java/gtPlusPlus/plugin/villagers/Core_VillagerAdditions.java +++ b/src/Java/gtPlusPlus/plugin/villagers/Core_VillagerAdditions.java @@ -1,13 +1,17 @@ package gtPlusPlus.plugin.villagers; +import static gtPlusPlus.plugin.villagers.VillagerUtils.mVillagerMap; + import java.util.HashMap; +import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.VillagerRegistry; import cpw.mods.fml.common.registry.VillagerRegistry.IVillageTradeHandler; import gtPlusPlus.api.interfaces.IPlugin; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.entity.EntityPrimedMiningExplosive; import gtPlusPlus.core.entity.monster.EntityGiantChickenBase; import gtPlusPlus.core.entity.monster.EntitySickBlaze; import gtPlusPlus.core.entity.monster.EntityStaballoyConstruct; @@ -15,6 +19,7 @@ import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.util.Utils; import gtPlusPlus.plugin.manager.Core_Manager; import gtPlusPlus.plugin.villagers.block.BlockGenericSpawner; +import gtPlusPlus.plugin.villagers.entity.EntityBaseVillager; import net.minecraft.util.ResourceLocation; public class Core_VillagerAdditions implements IPlugin { @@ -37,26 +42,43 @@ public class Core_VillagerAdditions implements IPlugin { shouldLoad = true; } if (shouldLoad) { + //Register Custom Villager Entity + EntityRegistry.registerGlobalEntityID(EntityBaseVillager.class, "VillagerV5", EntityRegistry.findGlobalUniqueEntityId(), Utils.rgbtoHexValue(180, 120, 120), Utils.rgbtoHexValue(0, 0, 0)); + //Try register some test spawners Utils.createNewMobSpawner(0, EntityGiantChickenBase.class); Utils.createNewMobSpawner(1, EntitySickBlaze.class); Utils.createNewMobSpawner(2, EntityStaballoyConstruct.class); + + VillagerUtils.registerNewVillager(0, "TESTIFICATE", "TESTIFICATE", "TESTIFICATE", null, null); + VillagerUtils.registerNewVillager(1, "TESTIFICATE1", "TESTIFICATE1", "TESTIFICATE1", null, null); + VillagerUtils.registerNewVillager(2, "TESTIFICATE2", "TESTIFICATE2", "TESTIFICATE2", null, null); + + if (mVillagerMap.size() > 0) { + for (VillagerObject g : mVillagerMap.values()) { + if (g != null && g.mID >= 0) { + VillagerRegistry.instance().registerVillagerId(g.mID); + log("Registered a Custom Villager with ID of "+g.mID+"."); + Utils.createNewMobSpawner(10+g.mID, EntityBaseVillager.class); + if (mVillagerSkins.get(g.mID) != null) { + VillagerRegistry.instance().registerVillagerSkin(g.mID, mVillagerSkins.get(g.mID)); + log("Registered a Custom Skin for Villager with ID of "+g.mID+"."); + } + } + } + } //Register all Villager ID's and their Custom Trades. if (mVillagerTrades.size() > 0) { for (Pair<Integer, IVillageTradeHandler> g : mVillagerTrades) { if (g != null && g.getKey() != null) { - VillagerRegistry.instance().registerVillagerId(g.getKey()); if (g.getValue() != null) { VillagerRegistry.instance().registerVillageTradeHandler(g.getKey(), g.getValue()); - } - if (mVillagerSkins.get(g.getKey()) != null) { - VillagerRegistry.instance().registerVillagerSkin(g.getKey(), mVillagerSkins.get(g.getKey())); + log("Registered a Custom Trade for Villager with ID of "+g.getKey()+"."); } } } - return true; - } + } } return false; } diff --git a/src/Java/gtPlusPlus/plugin/villagers/VillagerObject.java b/src/Java/gtPlusPlus/plugin/villagers/VillagerObject.java new file mode 100644 index 0000000000..c0684b6227 --- /dev/null +++ b/src/Java/gtPlusPlus/plugin/villagers/VillagerObject.java @@ -0,0 +1,31 @@ +package gtPlusPlus.plugin.villagers; + +import cpw.mods.fml.common.registry.VillagerRegistry.IVillageTradeHandler; +import gtPlusPlus.api.objects.data.Pair; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.plugin.villagers.entity.EntityBaseVillager; +import net.minecraft.util.ResourceLocation; + +public class VillagerObject { + + public final int mID; + public final String mName; + + + public VillagerObject(int aID, String aName, Object aProfession, Object aCareer, ResourceLocation aSkin, IVillageTradeHandler aCustomTrade) { + + mID = aID; + mName = aName; + + //Register Custom Trade to Registry. + if (aCustomTrade != null) { + Core_VillagerAdditions.mVillagerTrades.put(new Pair<Integer, IVillageTradeHandler>(aID, aCustomTrade)); + } + //Register Skin to Registry. + if (aSkin != null) { + Core_VillagerAdditions.mVillagerSkins.put(aID, aSkin); + } + VillagerUtils.registerNewVillager(aID, this); + } + +} diff --git a/src/Java/gtPlusPlus/plugin/villagers/VillagerUtils.java b/src/Java/gtPlusPlus/plugin/villagers/VillagerUtils.java index 3139bbe698..848b0fcfbb 100644 --- a/src/Java/gtPlusPlus/plugin/villagers/VillagerUtils.java +++ b/src/Java/gtPlusPlus/plugin/villagers/VillagerUtils.java @@ -1,28 +1,20 @@ package gtPlusPlus.plugin.villagers; +import java.util.HashMap; + import cpw.mods.fml.common.registry.VillagerRegistry.IVillageTradeHandler; -import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.plugin.villagers.entity.EntityBaseVillager; import net.minecraft.util.ResourceLocation; public class VillagerUtils { + public static final HashMap<Integer, VillagerObject> mVillagerMap = new HashMap<Integer, VillagerObject>(); public static void registerNewVillager(int aID, String aName, Object aProfession, Object aCareer, ResourceLocation aSkin, IVillageTradeHandler aCustomTrade) { - - //Register Custom Trade to Registry. - if (aCustomTrade != null) { - Core_VillagerAdditions.mVillagerTrades.put(new Pair<Integer, IVillageTradeHandler>(aID, aCustomTrade)); - } - //Register Skin to Registry. - if (aSkin != null) { - Core_VillagerAdditions.mVillagerSkins.put(aID, aSkin); - } - - EntityBaseVillager entityvillager = new EntityBaseVillager(null, aID); - Utils.createNewMobSpawner(aID, entityvillager); - + registerNewVillager(aID, new VillagerObject(aID, aName, aProfession, aCareer, aSkin, aCustomTrade)); + } + + public static void registerNewVillager(int aID, VillagerObject aVillager) { + mVillagerMap.put(aID, aVillager); } diff --git a/src/Java/gtPlusPlus/plugin/villagers/block/BlockGenericSpawner.java b/src/Java/gtPlusPlus/plugin/villagers/block/BlockGenericSpawner.java index 5f3e704818..916f360012 100644 --- a/src/Java/gtPlusPlus/plugin/villagers/block/BlockGenericSpawner.java +++ b/src/Java/gtPlusPlus/plugin/villagers/block/BlockGenericSpawner.java @@ -7,8 +7,7 @@ import java.util.List; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.item.base.itemblock.ItemBlockMeta; +import gtPlusPlus.core.item.base.itemblock.ItemBlockSpawner; import gtPlusPlus.plugin.villagers.Core_VillagerAdditions; import gtPlusPlus.plugin.villagers.tile.TileEntityGenericSpawner; import net.minecraft.block.BlockMobSpawner; @@ -28,7 +27,7 @@ public class BlockGenericSpawner extends BlockMobSpawner { this.setBlockName("blockMobSpawnerEx"); this.setBlockTextureName("mob_spawner"); this.setResistance(2000.0F); - GameRegistry.registerBlock(this, ItemBlockMeta.class, "blockMobSpawnerEx"); + GameRegistry.registerBlock(this, ItemBlockSpawner.class, "blockMobSpawnerEx"); Core_VillagerAdditions.mInstance.log("Registered Custom Spawner Block."); } diff --git a/src/Java/gtPlusPlus/plugin/villagers/entity/EntityBaseVillager.java b/src/Java/gtPlusPlus/plugin/villagers/entity/EntityBaseVillager.java index 429ca104ac..dc97aa4ce6 100644 --- a/src/Java/gtPlusPlus/plugin/villagers/entity/EntityBaseVillager.java +++ b/src/Java/gtPlusPlus/plugin/villagers/entity/EntityBaseVillager.java @@ -45,6 +45,10 @@ public class EntityBaseVillager extends EntityVillager { * extend EntityVillager and just implement IMerchant instead. */ + public EntityBaseVillager(World aWorld){ + this(aWorld, 0); + } + public EntityBaseVillager(World aWorld, int aID) { super(aWorld, aID); } diff --git a/src/Java/gtPlusPlus/plugin/villagers/tile/TileEntityGenericSpawner.java b/src/Java/gtPlusPlus/plugin/villagers/tile/TileEntityGenericSpawner.java index 9f2e992d74..53c0c78a23 100644 --- a/src/Java/gtPlusPlus/plugin/villagers/tile/TileEntityGenericSpawner.java +++ b/src/Java/gtPlusPlus/plugin/villagers/tile/TileEntityGenericSpawner.java @@ -128,8 +128,14 @@ public class TileEntityGenericSpawner extends TileEntityMobSpawner { @Override public void writeToNBT(NBTTagCompound p_145841_1_) { if (hasInternalFieldBeenSet()) { - String s = (String) classToNameMap_Ex.get(mSpawners.get(this.mID)); - if (s == null){ + String s = (String) classToNameMap_Ex.get(this.getClass()); + if (s == null){ + for (Object g : classToNameMap_Ex.values()) { + if (g instanceof String) { + Logger.INFO("Found Translation for "+((Class) nameToClassMap_Ex.get(g)).getName()+": "+g); + } + } + //throw new RuntimeException(this.getClass() + " is missing a mapping! This is a bug!"); s = mSpawners.containsKey(this.mID) ? mSpawners.get(this.mID).getSimpleName() : "bad.class.name"; p_145841_1_.setString("id", s); @@ -140,7 +146,7 @@ public class TileEntityGenericSpawner extends TileEntityMobSpawner { p_145841_1_.setInteger("mID", this.mID); } else { - Logger.WARNING(this.getClass() + " is not missing a mapping! Used key: "+s); + Logger.INFO(this.getClass() + " is not missing a mapping! Used key: "+s); p_145841_1_.setString("id", s); p_145841_1_.setInteger("x", this.xCoord); p_145841_1_.setInteger("y", this.yCoord); |