qq869653899
用gameregisty注册了tileentity,在退出重进之前一切功能正常,但是一旦退出重进后,tileentity就会变成初始状态,我用的是1.6.4版本,求大神解救。。。
TileEntityUnionCore.java
  1. package littlebug.ModUnion;

  2. import java.lang.reflect.Field;
  3. import java.util.ArrayList;
  4. import java.util.List;

  5. import cpw.mods.fml.client.FMLClientHandler;
  6. import net.minecraft.client.Minecraft;
  7. import net.minecraft.client.gui.GuiScreen;
  8. import net.minecraft.nbt.NBTTagCompound;
  9. import net.minecraft.network.INetworkManager;
  10. import net.minecraft.network.packet.Packet;
  11. import net.minecraft.network.packet.Packet132TileEntityData;
  12. import net.minecraft.tileentity.TileEntity;

  13. public class TileEntityUnionCore extends TileEntity{
  14.         private String union_name = "";
  15.         private String chair_name = "";
  16.         private List<String> members = new ArrayList<String>();
  17.         private String permissions = "";

  18.         public int a = 4;
  19.         public String getUnion_name() {
  20.                 return this.union_name;
  21.         }
  22.         public void setUnion_name(String union_name) {
  23.                 this.union_name = union_name;
  24.         }
  25.        
  26.         @Override
  27.         public void readFromNBT(NBTTagCompound par1NBTTagCompound)
  28.     {
  29.         super.readFromNBT(par1NBTTagCompound);
  30.         this.union_name = par1NBTTagCompound.getString("union_name");
  31.         this.permissions = par1NBTTagCompound.getString("permissions");
  32.         String[] members = par1NBTTagCompound.getString("members").split(";");
  33.         for (String m : members){
  34.                 this.members.add(m);
  35.         }
  36.         a = par1NBTTagCompound.getInteger("a");
  37.     }
  38.        
  39.         @Override
  40.     public void writeToNBT(NBTTagCompound par1NBTTagCompound)
  41.     {
  42.         super.writeToNBT(par1NBTTagCompound);
  43.         par1NBTTagCompound.setString("union_name", union_name);
  44.         par1NBTTagCompound.setString("permissions", permissions);
  45.         String members = "";
  46.         for (String m : this.members){
  47.                 members += m + ";";
  48.         }
  49.         par1NBTTagCompound.setString("members", members);
  50.         par1NBTTagCompound.setInteger("a", a);
  51.     }
  52.         public String getChair_name() {
  53.                 return chair_name;
  54.         }
  55.         public void setChair_name(String chair_name) {
  56.                 this.chair_name = chair_name;
  57.         }
  58.         public List<String> getMembers() {
  59.                 return members;
  60.         }
  61.         public void setMembers(List<String> members) {
  62.                 this.members = members;
  63.         }
  64.         public String getPermissions() {
  65.                 return permissions;
  66.         }
  67.         public void setPermissions(String permissions) {
  68.                 this.permissions = permissions;
  69.         }
  70.        
  71.                 
  72. }
复制代码

BlockUnionCore.java
  1. package littlebug.ModUnion;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. import littlebug.ModUnion.NetWork.UnionPacket;
  5. import cpw.mods.fml.common.network.PacketDispatcher;
  6. import cpw.mods.fml.common.network.Player;
  7. import cpw.mods.fml.common.registry.GameRegistry;
  8. import cpw.mods.fml.common.registry.LanguageRegistry;
  9. import cpw.mods.fml.relauncher.Side;
  10. import cpw.mods.fml.relauncher.SideOnly;
  11. import net.minecraft.block.Block;
  12. import net.minecraft.block.BlockContainer;
  13. import net.minecraft.block.material.Material;
  14. import net.minecraft.client.Minecraft;
  15. import net.minecraft.client.gui.GuiScreen;
  16. import net.minecraft.client.renderer.texture.IconRegister;
  17. import net.minecraft.creativetab.CreativeTabs;
  18. import net.minecraft.entity.EntityLivingBase;
  19. import net.minecraft.entity.player.EntityPlayer;
  20. import net.minecraft.item.ItemStack;
  21. import net.minecraft.tileentity.TileEntity;
  22. import net.minecraft.world.World;
  23. import net.minecraftforge.common.MinecraftForge;

  24. public class BlockUnionCore extends BlockContainer{

  25.          
  26.         public BlockUnionCore(int par1, Material par2Material) {
  27.                 super(par1, par2Material);
  28.                 // TODO Auto-generated constructor stub
  29.                 this.init();
  30.         }

  31.         public void init(){
  32.                 this.setUnlocalizedName("UnionCore");
  33.                 //this.setTextureName("ghoul:GhoulAltar");
  34.                 this.setHardness(1.5f); //设置砖块的硬度
  35.                 this.setResistance(10.0f); //置对爆炸的抗性
  36.                 this.setLightValue(0.0f); //设置发光亮度
  37.                 this.setStepSound(Block.soundStoneFootstep); //设置踩在上面的脚步声
  38.                 this.setCreativeTab(CreativeTabs.tabBlock); //设置在创造模式中它在哪个菜单分类里
  39.                 GameRegistry.registerBlock(this, "UnionCore");
  40.                 LanguageRegistry.addName(this, "工会核心");
  41.                
  42.                 //MinecraftForge.setBlockHarvestLevel(this, "GhoulsArm", 3);
  43.         }
  44.        
  45.         /**
  46.      * 注册贴图。
  47.      */
  48.     @SideOnly(Side.CLIENT)
  49.     public void registerIcons(IconRegister par1IconRegister)
  50.     {
  51.         this.blockIcon = par1IconRegister.registerIcon("ghoul:GhoulAltar");
  52.     }
  53.        
  54.    
  55.         public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack){
  56.                 super.onBlockPlacedBy(par1World, par2, par3, par4, par5EntityLivingBase, par6ItemStack);
  57.                
  58.                 String name = par5EntityLivingBase.getEntityName() + "union";
  59.                 int[] rect = new int[]{par2-16,par4-16,par2-16,par4+16,par2+16,par4-16,par2+16,par4+16};
  60.                 List<String> members = new ArrayList<>();
  61.                 members.add(par5EntityLivingBase.getEntityName());
  62.                 String chair_man = par5EntityLivingBase.getEntityName();
  63.                 String permissions = "1111";
  64.                 UnionList.addUnion(name, rect, members, chair_man, permissions);
  65.                 TileEntity tile = Minecraft.getMinecraft().theWorld.getBlockTileEntity(par2, par3, par4);
  66.                 if (tile instanceof TileEntityUnionCore){
  67.                         ((TileEntityUnionCore) tile).setUnion_name(name);
  68.                         ((TileEntityUnionCore) tile).setChair_name(chair_man);
  69.                         ((TileEntityUnionCore) tile).setMembers(members);
  70.                         ((TileEntityUnionCore) tile).setPermissions(permissions);
  71.                        
  72.                 }
  73.         }
  74.        
  75.         @Override
  76.         public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9){
  77.                 super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
  78.                 TileEntityUnionCore tileEntity = (TileEntityUnionCore) par1World.getBlockTileEntity(par2, par3, par4);
  79.                 if (tileEntity == null || par5EntityPlayer.isSneaking()){
  80.                         return false;
  81.                 }
  82.                 if(par1World.isRemote)
  83.         {
  84.             //如果蹲下但是客户端,也跳出,但返回true使其挥舞手臂
  85.             return true;
  86.         }
  87.                 //Minecraft.getMinecraft().displayGuiScreen(new GuiUnionCore(par2, par3, par4));
  88.                 UnionPacket pak = new UnionPacket();
  89.                 //我们要发送3个int数据,所以初始化数组大小为3
  90.                 pak.dataInt = new int[3];
  91.                 //数据包ID为0
  92.                 pak.packetType = 0;
  93.                 //方块X轴坐标
  94.                 pak.dataInt[0] = par2;
  95.                 //方块Y轴坐标
  96.                 pak.dataInt[1] = par3;
  97.                 //方块Z轴坐标
  98.                 pak.dataInt[2] = par4;
  99.                 //发送数据包
  100.                 PacketDispatcher.sendPacketToPlayer(pak.toPacket(), (Player)par5EntityPlayer);
  101.                 //System.out.println("123");
  102.                
  103.                 return true;
  104.         }

  105.         @Override
  106.         public TileEntity createNewTileEntity(World world) {
  107.                 // TODO Auto-generated method stub
  108.                 return new TileEntityUnionCore();
  109.         }
  110.        
  111. }
复制代码

Union.java  //mod主类
  1. package littlebug.ModUnion;

  2. import littlebug.ModArcana.ArcanaEventHooks;
  3. import littlebug.ModUnion.NetWork.PaketHandler;
  4. import littlebug.ModUnion.NetWork.UnionPacket;
  5. import net.minecraft.block.material.Material;
  6. import net.minecraft.client.Minecraft;
  7. import net.minecraft.entity.EnumCreatureType;
  8. import net.minecraft.entity.player.EntityPlayerMP;
  9. import net.minecraft.item.Item;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraft.src.ModLoader;
  12. import net.minecraft.tileentity.TileEntity;
  13. import net.minecraft.world.biome.BiomeGenBase;
  14. import net.minecraftforge.common.MinecraftForge;
  15. import cpw.mods.fml.common.Mod;
  16. import cpw.mods.fml.common.SidedProxy;
  17. import cpw.mods.fml.common.event.FMLInitializationEvent;
  18. import cpw.mods.fml.common.event.FMLPostInitializationEvent;
  19. import cpw.mods.fml.common.event.FMLPreInitializationEvent;
  20. import cpw.mods.fml.common.network.NetworkMod;
  21. import cpw.mods.fml.common.network.NetworkRegistry;
  22. import cpw.mods.fml.common.registry.EntityRegistry;
  23. import cpw.mods.fml.common.registry.GameRegistry;
  24. import cpw.mods.fml.common.registry.LanguageRegistry;
  25. import cpw.mods.fml.common.Mod.EventHandler;
  26. import cpw.mods.fml.common.Mod.Instance;
  27. import cpw.mods.fml.relauncher.Side;
  28. import cpw.mods.fml.relauncher.SideOnly;

  29. @Mod(modid="Union", name="Union", version="alpha")
  30. @NetworkMod(clientSideRequired=true, serverSideRequired=false, channels={"UnionMod"}, packetHandler=PaketHandler.class)
  31. public class Union {
  32.         @Instance("Union")
  33.         public static Union instance;
  34. //        public static int ScrollID;
  35.         public static int BlockUnionCoreID;
  36.        
  37.         public static BlockUnionCore blockUnionCore;
  38.        
  39.         @SidedProxy(clientSide = "littlebug.ModUnion.Client", serverSide = "littlebug.ModUnion.Common")
  40.         public static Common proxy;
  41.        
  42.         @EventHandler
  43.         public void preLoad(FMLPreInitializationEvent event)
  44.         {
  45.                
  46.                 UnionConfig.InitliazeConfig(event.getSuggestedConfigurationFile());
  47.                 try
  48.                 {
  49.                         BlockUnionCoreID = UnionConfig.GetBlockID("BlockUnionCore", 1000);
  50.                 }
  51.                 catch(Exception error)
  52.                 {
  53.                     System.out.println(error.getMessage());
  54.                     System.out.println(error.getStackTrace());
  55.                 }
  56.                 UnionConfig.SaveConfig();
  57.                 try{
  58.                         UnionList.setList();
  59.                 }
  60.                 catch(Exception error){
  61.                        
  62.                 }
  63.                
  64.                 blockUnionCore = new BlockUnionCore(BlockUnionCoreID, Material.rock);
  65.                 GameRegistry.registerBlock(blockUnionCore,"BlockUnionCore");
  66.                 //EntityRegistry.addSpawn(EntityMirrorImage.class, 2, 1, 1, EnumCreatureType.monster, BiomeGenBase.biomeList);
  67.                
  68.                 proxy.registerRenderThings();
  69.                 proxy.registerSound();
  70.                        
  71.                 //LanguageRegistry.instance().addStringLocalization("entity.WeakDio.name", "en_US", "WeakDio");
  72.         }
  73.          
  74.         @EventHandler
  75.         public void load(FMLInitializationEvent event)
  76.         {
  77.                 //TileEntity.addMapping(TileEntityUnionCore.class, "UnionCoreTileEntity");
  78.                 GameRegistry.registerTileEntity(TileEntityUnionCore.class, "ucTile");
  79.         }
  80.          
  81.         @EventHandler
  82.         public void postLoad(FMLPostInitializationEvent event)
  83.         {
  84.                 this.registerEvents();
  85.                 this.semltingInit();
  86.                 this.recipeInit();
  87.         }
  88.         private void semltingInit(){
  89.                 //GameRegistry.addSmelting(bloodOfVampire.itemID, new ItemStack(animaOfVampire), 1f);
  90.         }
  91.         private void recipeInit(){
  92.                 //GameRegistry.addRecipe(new ItemStack(animaOfVampire,1), new Object[] {" # ", "#X#", " # ", '#', Block.blockLapis, 'X', bloodOfVampire});
  93.         }
  94.         private void registerEvents(){
  95.                 MinecraftForge.EVENT_BUS.register(new UnionEventHooks());
  96.         }
  97.        
  98.         public static void handlePacketFromClient(UnionPacket packet, EntityPlayerMP player)
  99.         {
  100.                 if(packet.packetType == 1)
  101.                 {
  102.                     String name = packet.dataString[0];
  103.                     String permissions = packet.dataString[1];
  104.                     
  105.                     UnionList union = UnionList.unions.get(name);
  106.                     if (union == null){
  107.                             return;
  108.                     }
  109.                     UnionList.updateUnion(name, union.getRect(), union.getMembers(), union.getChair_name(), permissions);
  110.                 }
  111.         }
  112.         @SideOnly(Side.CLIENT)
  113.         public static void handlePacketFromServer(UnionPacket packet)
  114.         {
  115.             if (packet.packetType == 0){
  116.                     Minecraft.getMinecraft().displayGuiScreen(new GuiUnionCore(packet.dataInt[0], packet.dataInt[1], packet.dataInt[2]));
  117.             }
  118.         }
  119. }
复制代码




yuxuanchiadm
当tileEntity更新后,有需要写入NBT的信息,必须执行TileEntity.markDirty()方法,才能确保在地图保存时保存此次更改的信息到NBT。

yuxuanchiadm
如果是1.6以及以下版本则是TileEntity.onInventoryChanged()方法

qq869653899
yuxuanchiadm 发表于 2014-5-29 01:28
如果是1.6以及以下版本则是TileEntity.onInventoryChanged()方法

谢谢,但是没有用,我试着在修改tileentity后调用onInventoryChanged()方法,但是没有效果,还是说我调用的姿势不对?

第一页 上一页 下一页 最后一页