用gameregisty注册了tileentity,在退出重进之前一切功能正常,但是一旦退出重进后,tileentity就会变成初始状态,我用的是1.6.4版本,求大神解救。。。
TileEntityUnionCore.java
复制代码
BlockUnionCore.java
复制代码
Union.java //mod主类
复制代码
TileEntityUnionCore.java
- package littlebug.ModUnion;
- import java.lang.reflect.Field;
- import java.util.ArrayList;
- import java.util.List;
- import cpw.mods.fml.client.FMLClientHandler;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.gui.GuiScreen;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.network.INetworkManager;
- import net.minecraft.network.packet.Packet;
- import net.minecraft.network.packet.Packet132TileEntityData;
- import net.minecraft.tileentity.TileEntity;
- public class TileEntityUnionCore extends TileEntity{
- private String union_name = "";
- private String chair_name = "";
- private List<String> members = new ArrayList<String>();
- private String permissions = "";
- public int a = 4;
- public String getUnion_name() {
- return this.union_name;
- }
- public void setUnion_name(String union_name) {
- this.union_name = union_name;
- }
-
- @Override
- public void readFromNBT(NBTTagCompound par1NBTTagCompound)
- {
- super.readFromNBT(par1NBTTagCompound);
- this.union_name = par1NBTTagCompound.getString("union_name");
- this.permissions = par1NBTTagCompound.getString("permissions");
- String[] members = par1NBTTagCompound.getString("members").split(";");
- for (String m : members){
- this.members.add(m);
- }
- a = par1NBTTagCompound.getInteger("a");
- }
-
- @Override
- public void writeToNBT(NBTTagCompound par1NBTTagCompound)
- {
- super.writeToNBT(par1NBTTagCompound);
- par1NBTTagCompound.setString("union_name", union_name);
- par1NBTTagCompound.setString("permissions", permissions);
- String members = "";
- for (String m : this.members){
- members += m + ";";
- }
- par1NBTTagCompound.setString("members", members);
- par1NBTTagCompound.setInteger("a", a);
- }
- public String getChair_name() {
- return chair_name;
- }
- public void setChair_name(String chair_name) {
- this.chair_name = chair_name;
- }
- public List<String> getMembers() {
- return members;
- }
- public void setMembers(List<String> members) {
- this.members = members;
- }
- public String getPermissions() {
- return permissions;
- }
- public void setPermissions(String permissions) {
- this.permissions = permissions;
- }
-
-
- }
BlockUnionCore.java
- package littlebug.ModUnion;
- import java.util.ArrayList;
- import java.util.List;
- import littlebug.ModUnion.NetWork.UnionPacket;
- import cpw.mods.fml.common.network.PacketDispatcher;
- import cpw.mods.fml.common.network.Player;
- import cpw.mods.fml.common.registry.GameRegistry;
- import cpw.mods.fml.common.registry.LanguageRegistry;
- import cpw.mods.fml.relauncher.Side;
- import cpw.mods.fml.relauncher.SideOnly;
- import net.minecraft.block.Block;
- import net.minecraft.block.BlockContainer;
- import net.minecraft.block.material.Material;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.gui.GuiScreen;
- import net.minecraft.client.renderer.texture.IconRegister;
- import net.minecraft.creativetab.CreativeTabs;
- import net.minecraft.entity.EntityLivingBase;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.item.ItemStack;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.world.World;
- import net.minecraftforge.common.MinecraftForge;
- public class BlockUnionCore extends BlockContainer{
-
- public BlockUnionCore(int par1, Material par2Material) {
- super(par1, par2Material);
- // TODO Auto-generated constructor stub
- this.init();
- }
- public void init(){
- this.setUnlocalizedName("UnionCore");
- //this.setTextureName("ghoul:GhoulAltar");
- this.setHardness(1.5f); //设置砖块的硬度
- this.setResistance(10.0f); //置对爆炸的抗性
- this.setLightValue(0.0f); //设置发光亮度
- this.setStepSound(Block.soundStoneFootstep); //设置踩在上面的脚步声
- this.setCreativeTab(CreativeTabs.tabBlock); //设置在创造模式中它在哪个菜单分类里
- GameRegistry.registerBlock(this, "UnionCore");
- LanguageRegistry.addName(this, "工会核心");
-
- //MinecraftForge.setBlockHarvestLevel(this, "GhoulsArm", 3);
- }
-
- /**
- * 注册贴图。
- */
- @SideOnly(Side.CLIENT)
- public void registerIcons(IconRegister par1IconRegister)
- {
- this.blockIcon = par1IconRegister.registerIcon("ghoul:GhoulAltar");
- }
-
-
- public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack){
- super.onBlockPlacedBy(par1World, par2, par3, par4, par5EntityLivingBase, par6ItemStack);
-
- String name = par5EntityLivingBase.getEntityName() + "union";
- int[] rect = new int[]{par2-16,par4-16,par2-16,par4+16,par2+16,par4-16,par2+16,par4+16};
- List<String> members = new ArrayList<>();
- members.add(par5EntityLivingBase.getEntityName());
- String chair_man = par5EntityLivingBase.getEntityName();
- String permissions = "1111";
- UnionList.addUnion(name, rect, members, chair_man, permissions);
- TileEntity tile = Minecraft.getMinecraft().theWorld.getBlockTileEntity(par2, par3, par4);
- if (tile instanceof TileEntityUnionCore){
- ((TileEntityUnionCore) tile).setUnion_name(name);
- ((TileEntityUnionCore) tile).setChair_name(chair_man);
- ((TileEntityUnionCore) tile).setMembers(members);
- ((TileEntityUnionCore) tile).setPermissions(permissions);
-
- }
- }
-
- @Override
- public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9){
- super.onBlockActivated(par1World, par2, par3, par4, par5EntityPlayer, par6, par7, par8, par9);
- TileEntityUnionCore tileEntity = (TileEntityUnionCore) par1World.getBlockTileEntity(par2, par3, par4);
- if (tileEntity == null || par5EntityPlayer.isSneaking()){
- return false;
- }
- if(par1World.isRemote)
- {
- //如果蹲下但是客户端,也跳出,但返回true使其挥舞手臂
- return true;
- }
- //Minecraft.getMinecraft().displayGuiScreen(new GuiUnionCore(par2, par3, par4));
- UnionPacket pak = new UnionPacket();
- //我们要发送3个int数据,所以初始化数组大小为3
- pak.dataInt = new int[3];
- //数据包ID为0
- pak.packetType = 0;
- //方块X轴坐标
- pak.dataInt[0] = par2;
- //方块Y轴坐标
- pak.dataInt[1] = par3;
- //方块Z轴坐标
- pak.dataInt[2] = par4;
- //发送数据包
- PacketDispatcher.sendPacketToPlayer(pak.toPacket(), (Player)par5EntityPlayer);
- //System.out.println("123");
-
- return true;
- }
- @Override
- public TileEntity createNewTileEntity(World world) {
- // TODO Auto-generated method stub
- return new TileEntityUnionCore();
- }
-
- }
Union.java //mod主类
- package littlebug.ModUnion;
- import littlebug.ModArcana.ArcanaEventHooks;
- import littlebug.ModUnion.NetWork.PaketHandler;
- import littlebug.ModUnion.NetWork.UnionPacket;
- import net.minecraft.block.material.Material;
- import net.minecraft.client.Minecraft;
- import net.minecraft.entity.EnumCreatureType;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.item.Item;
- import net.minecraft.item.ItemStack;
- import net.minecraft.src.ModLoader;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.world.biome.BiomeGenBase;
- import net.minecraftforge.common.MinecraftForge;
- import cpw.mods.fml.common.Mod;
- import cpw.mods.fml.common.SidedProxy;
- import cpw.mods.fml.common.event.FMLInitializationEvent;
- import cpw.mods.fml.common.event.FMLPostInitializationEvent;
- import cpw.mods.fml.common.event.FMLPreInitializationEvent;
- import cpw.mods.fml.common.network.NetworkMod;
- import cpw.mods.fml.common.network.NetworkRegistry;
- import cpw.mods.fml.common.registry.EntityRegistry;
- import cpw.mods.fml.common.registry.GameRegistry;
- import cpw.mods.fml.common.registry.LanguageRegistry;
- import cpw.mods.fml.common.Mod.EventHandler;
- import cpw.mods.fml.common.Mod.Instance;
- import cpw.mods.fml.relauncher.Side;
- import cpw.mods.fml.relauncher.SideOnly;
- @Mod(modid="Union", name="Union", version="alpha")
- @NetworkMod(clientSideRequired=true, serverSideRequired=false, channels={"UnionMod"}, packetHandler=PaketHandler.class)
- public class Union {
- @Instance("Union")
- public static Union instance;
- // public static int ScrollID;
- public static int BlockUnionCoreID;
-
- public static BlockUnionCore blockUnionCore;
-
- @SidedProxy(clientSide = "littlebug.ModUnion.Client", serverSide = "littlebug.ModUnion.Common")
- public static Common proxy;
-
- @EventHandler
- public void preLoad(FMLPreInitializationEvent event)
- {
-
- UnionConfig.InitliazeConfig(event.getSuggestedConfigurationFile());
- try
- {
- BlockUnionCoreID = UnionConfig.GetBlockID("BlockUnionCore", 1000);
- }
- catch(Exception error)
- {
- System.out.println(error.getMessage());
- System.out.println(error.getStackTrace());
- }
- UnionConfig.SaveConfig();
- try{
- UnionList.setList();
- }
- catch(Exception error){
-
- }
-
- blockUnionCore = new BlockUnionCore(BlockUnionCoreID, Material.rock);
- GameRegistry.registerBlock(blockUnionCore,"BlockUnionCore");
- //EntityRegistry.addSpawn(EntityMirrorImage.class, 2, 1, 1, EnumCreatureType.monster, BiomeGenBase.biomeList);
-
- proxy.registerRenderThings();
- proxy.registerSound();
-
- //LanguageRegistry.instance().addStringLocalization("entity.WeakDio.name", "en_US", "WeakDio");
- }
-
- @EventHandler
- public void load(FMLInitializationEvent event)
- {
- //TileEntity.addMapping(TileEntityUnionCore.class, "UnionCoreTileEntity");
- GameRegistry.registerTileEntity(TileEntityUnionCore.class, "ucTile");
- }
-
- @EventHandler
- public void postLoad(FMLPostInitializationEvent event)
- {
- this.registerEvents();
- this.semltingInit();
- this.recipeInit();
- }
- private void semltingInit(){
- //GameRegistry.addSmelting(bloodOfVampire.itemID, new ItemStack(animaOfVampire), 1f);
- }
- private void recipeInit(){
- //GameRegistry.addRecipe(new ItemStack(animaOfVampire,1), new Object[] {" # ", "#X#", " # ", '#', Block.blockLapis, 'X', bloodOfVampire});
- }
- private void registerEvents(){
- MinecraftForge.EVENT_BUS.register(new UnionEventHooks());
- }
-
- public static void handlePacketFromClient(UnionPacket packet, EntityPlayerMP player)
- {
- if(packet.packetType == 1)
- {
- String name = packet.dataString[0];
- String permissions = packet.dataString[1];
-
- UnionList union = UnionList.unions.get(name);
- if (union == null){
- return;
- }
- UnionList.updateUnion(name, union.getRect(), union.getMembers(), union.getChair_name(), permissions);
- }
- }
- @SideOnly(Side.CLIENT)
- public static void handlePacketFromServer(UnionPacket packet)
- {
- if (packet.packetType == 0){
- Minecraft.getMinecraft().displayGuiScreen(new GuiUnionCore(packet.dataInt[0], packet.dataInt[1], packet.dataInt[2]));
- }
- }
- }
当tileEntity更新后,有需要写入NBT的信息,必须执行TileEntity.markDirty()方法,才能确保在地图保存时保存此次更改的信息到NBT。
如果是1.6以及以下版本则是TileEntity.onInventoryChanged()方法
yuxuanchiadm 发表于 2014-5-29 01:28
如果是1.6以及以下版本则是TileEntity.onInventoryChanged()方法
谢谢,但是没有用,我试着在修改tileentity后调用onInventoryChanged()方法,但是没有效果,还是说我调用的姿势不对?