Написать код!

Версия Minecraft
1.7.10
269
8
19
Кто напишет код.
Код лёгкии,то и цена не большая
Цель:(Написать код который можно будет вставить в мой мод(если что)) Написать что при убиистве игрока сохронялось его количество убитых игроков и отоброжение ( строку на отоброжение я себе вставлю)
Цена:до 250 рублей
 
269
8
19
MJaroslav написал(а):
Я, конечно, сейчас заберу возможность людям заработать, но уже есть подобные модификации. А названия аля 'Death Counter', etc. Вскрыть их код, думаю, несложно.

спасибо чел! я просто моды не мог найти!


MJaroslav написал(а):
Я, конечно, сейчас заберу возможность людям заработать, но уже есть подобные модификации. А названия аля 'Death Counter', etc. Вскрыть их код, думаю, несложно.

Нет,там не разберёшь там
 
3,005
192
592
Создаешь IEEP для игрока.
В death эвенте чекаешь, что убил и убит игрок.
Добавляешь тому, кто убил + 1.
Для оверлея - просто выводишь число из IEEP.
Синхронизация - эвент на 2х сторонах, тогда синхронизацию не нужно +
+ когда заходишь отправлять на клиент число.

За пару минут можно такое написать. (Ну мааааксимум час)
 
269
8
19
Doc написал(а):
Создаешь IEEP для игрока.
В death эвенте чекаешь, что убил и убит игрок.
Добавляешь тому, кто убил + 1.
Для оверлея - просто выводишь число из IEEP.
Синхронизация - эвент на 2х сторонах, тогда синхронизацию не нужно +
+ когда заходишь отправлять на клиент число.

За пару минут можно такое написать. (Ну мааааксимум час)

Ну напиши
 

Icosider

Kotliner
Администратор
3,603
99
664
Doc написал(а):
Синхронизация - эвент на 2х сторонах, тогда синхронизацию не нужно +
Лол, что? При изменении счетчика убийств нужно слать пакет на клиент, и событие связанное с убиством срабатывает на серверной части, на клиенте не нужно...
 

timaxa007

Модератор
5,831
409
672
Если использовать ванильное сохранение и отправку пакета:
Java:
    @SubscribeEvent
    public void drawText(RenderGameOverlayEvent.Post event) {
        switch(event.type) {
        case TEXT:
            String text = StatCollector.translateToLocal(StatList.playerKillsStat.statId) + ": " + mc.thePlayer.getStatFileWriter().writeStat(StatList.playerKillsStat) + ".";
            mc.fontRenderer.drawStringWithShadow(text,
                    event.resolution.getScaledWidth() - mc.fontRenderer.getStringWidth(text),
                    0, 0xFFFFFF);
            break;
        default:break;
        }
    }

    @SubscribeEvent
    public void sendInDeathPlayer(LivingDeathEvent event) {
    Entity from = event.source.getSourceOfDamage();//Кто убил.
    EntityLivingBase to = event.entityLiving;//Кого убили.
    if (from instanceof EntityPlayer && to instanceof EntityPlayer) {
            mc.getNetHandler().addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS));
    }
Только вот после перезахода значение на клиенте будет равна нулю и обновляется если убить игрока или войти в GUI статистики игрока. Пробовал использовать PlayerLoggedInEvent и EntityJoinWorldEvent отправляя пакет C16PacketClientStatus, то получал краш, так что здесь нужно отправлять свой пакет (или свой IMessage). Так как пакет C16PacketClientStatus запрашивает всю статистику игрока (а там много значений).


MrKrabik написал(а):
Doc написал(а):
Создаешь IEEP для игрока.
В death эвенте чекаешь, что убил и убит игрок.
Добавляешь тому, кто убил + 1.
Для оверлея - просто выводишь число из IEEP.
Синхронизация - эвент на 2х сторонах, тогда синхронизацию не нужно +
+ когда заходишь отправлять на клиент число.

За пару минут можно такое написать. (Ну мааааксимум час)

Ну напиши
Пожалуйста.
Java:
public class CountPlayerKillsIEEP implements IExtendedEntityProperties {

    private static final String TAG = "CountPlayerKills";

    int playerKills = 0;

    @Override
    public void init(Entity entity, World world) {}

    public static void reg(EntityPlayer entity) {
        entity.registerExtendedProperties(TAG, new CountPlayerKillsIEEP());
    }

    public static CountPlayerKillsIEEP get(EntityPlayer entity) {
        return (CountPlayerKillsIEEP)entity.getExtendedProperties(TAG);
    }

    public void killedPlayer() {
        ++playerKills;
    }

    public void setPlayerKills(int playerKills) {
        this.playerKills = playerKills;;
    }

    public int getPlayerKills() {
        return playerKills;
    }

    @Override
    public void saveNBTData(NBTTagCompound nbt) {
        if (playerKills > 0)
            nbt.setInteger("PlayerKills", playerKills);
    }

    @Override
    public void loadNBTData(NBTTagCompound nbt) {
        if (nbt.hasKey("PlayerKills", NBT.TAG_INT))
            playerKills = nbt.getInteger("PlayerKills");
    }

}
Java:
    @SubscribeEvent
    public void addEntityConstructing(EntityEvent.EntityConstructing event) {
        if (event.entity instanceof EntityPlayer) {
            if (CountPlayerKillsIEEP.get((EntityPlayer)event.entity) == null)
                CountPlayerKillsIEEP.reg((EntityPlayer)event.entity);
        }
    }

    @SubscribeEvent
    public void sendInDeathPlayer(LivingDeathEvent event) {
        Entity from = event.source.getSourceOfDamage();//Кто убил.
        EntityLivingBase to = event.entityLiving;//Кого убили.
        if (from instanceof EntityPlayerMP && to instanceof EntityPlayer) {
            CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get((EntityPlayerMP)from);
            if (cpk == null) return;
            cpk.killedPlayer();
            MessageCountPlayerKills message = new MessageCountPlayerKills();
            message.playerKills = cpk.getPlayerKills();
            SMTCommon.network.sendTo(message, (EntityPlayerMP)from);
        }
    }

    @SubscribeEvent
    public void sendInJoinWorld(EntityJoinWorldEvent event) {
        if (event.entity instanceof EntityPlayerMP) {
            CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get((EntityPlayerMP)event.entity);
            if (cpk == null) return;
            MessageCountPlayerKills message = new MessageCountPlayerKills();
            message.playerKills = cpk.getPlayerKills();
            SMTCommon.network.sendTo(message, (EntityPlayerMP)event.entity);
        }
    }
Java:
static Minecraft mc = Minecraft.getMinecraft();

    @SubscribeEvent
    public void drawText(RenderGameOverlayEvent.Post event) {
        switch(event.type) {
        case TEXT:
            CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(mc.thePlayer);
            if (cpk == null) return;
            String text = StatCollector.translateToLocal(StatList.playerKillsStat.statId) + ": " + cpk.getPlayerKills() + ".";
            mc.fontRenderer.drawStringWithShadow(text,
                    event.resolution.getScaledWidth() - mc.fontRenderer.getStringWidth(text),
                    0, 0xFFFFFF);
            break;
        default:break;
        }
    }
Java:
public class MessageCountPlayerKills implements IMessage {

    public int playerKills;

    public MessageCountPlayerKills() {}

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(playerKills);
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        playerKills = buf.readInt();
    }

    public static class Handler implements IMessageHandler<MessageCountPlayerKills, IMessage> {

        @Override
        public IMessage onMessage(MessageCountPlayerKills packet, MessageContext message) {
            if (message.side.isClient())
                act(packet);
            else
                act(message.getServerHandler().playerEntity, packet);
            return null;
        }

        @SideOnly(Side.CLIENT)
        private void act(MessageCountPlayerKills packet) {
            Minecraft mc = Minecraft.getMinecraft();
            CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(mc.thePlayer);
            if (cpk == null) return;
            cpk.setPlayerKills(packet.playerKills);
        }

        private void act(EntityPlayerMP player, MessageCountPlayerKills packet) {
            CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(player);
            if (cpk == null) return;
            cpk.setPlayerKills(packet.playerKills);

        }

    }

}
SMTCommon - главный класс
Java:
public static SimpleNetworkWrapper network;

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
    network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);
    network.registerMessage(MessageCountPlayerKills.Handler.class, MessageCountPlayerKills.class, id, Side.CLIENT);
    network.registerMessage(MessageCountPlayerKills.Handler.class, MessageCountPlayerKills.class, id++, Side.SERVER);
}
 
Последнее редактирование:
269
8
19
timaxa007 написал(а):
Если использовать ванильное сохранение и отправку пакета:
Код:
 @SubscribeEvent
 public void drawText(RenderGameOverlayEvent.Post event) {
 switch(event.type) {
 case TEXT:
 String text = StatCollector.translateToLocal(StatList.playerKillsStat.statId) + ": " + mc.thePlayer.getStatFileWriter().writeStat(StatList.playerKillsStat) + ".";
 mc.fontRenderer.drawStringWithShadow(text,
 event.resolution.getScaledWidth() - mc.fontRenderer.getStringWidth(text), 
 0, 0xFFFFFF);
 break;
 default:break;
 }
 }

 @SubscribeEvent
 public void sendInDeathPlayer(LivingDeathEvent event) {
    Entity from = event.source.getSourceOfDamage();//Кто убил.
    EntityLivingBase to = event.entityLiving;//Кого убили.
    if (from instanceof EntityPlayer && to instanceof EntityPlayer) {
 mc.getNetHandler().addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS));
 }
[video=youtube]https://youtu.be/PatYBmbk9KY[/video]
Только вот после перезахода значение на клиенте будет равна нулю и обновляется если убить игрока или войти в GUI статистики игрока. Пробовал использовать PlayerLoggedInEvent и EntityJoinWorldEvent отправляя пакет C16PacketClientStatus, то получал краш, так что здесь нужно отправлять свой пакет (или свой IMessage). Так как пакет C16PacketClientStatus запрашивает всю статистику игрока (а там много значений).


MrKrabik написал(а):
Doc написал(а):
Создаешь IEEP для игрока.
В death эвенте чекаешь, что убил и убит игрок.
Добавляешь тому, кто убил + 1.
Для оверлея - просто выводишь число из IEEP.
Синхронизация - эвент на 2х сторонах, тогда синхронизацию не нужно +
+ когда заходишь отправлять на клиент число.

За пару минут можно такое написать. (Ну мааааксимум час)

Ну напиши
Пожалуйста.
Код:
public class CountPlayerKillsIEEP implements IExtendedEntityProperties {

 private static final String TAG = "CountPlayerKills";

 int playerKills = 0;

 @Override
 public void init(Entity entity, World world) {}

 public static void reg(EntityPlayer entity) {
 entity.registerExtendedProperties(TAG, new CountPlayerKillsIEEP());
 }

 public static CountPlayerKillsIEEP get(EntityPlayer entity) {
 return (CountPlayerKillsIEEP)entity.getExtendedProperties(TAG);
 }

 public void killedPlayer() {
 ++playerKills;
 }

 public void setPlayerKills(int playerKills) {
 this.playerKills = playerKills;;
 }

 public int getPlayerKills() {
 return playerKills;
 }

 @Override
 public void saveNBTData(NBTTagCompound nbt) {
 if (playerKills > 0)
 nbt.setInteger("PlayerKills", playerKills);
 }

 @Override
 public void loadNBTData(NBTTagCompound nbt) {
 if (nbt.hasKey("PlayerKills", NBT.TAG_INT))
 playerKills = nbt.getInteger("PlayerKills");
 }

}
Код:
 @SubscribeEvent
 public void addEntityConstructing(EntityEvent.EntityConstructing event) {
 if (event.entity instanceof EntityPlayer) {
 if (CountPlayerKillsIEEP.get((EntityPlayer)event.entity) == null)
 CountPlayerKillsIEEP.reg((EntityPlayer)event.entity);
 }
 }

 @SubscribeEvent
 public void sendInDeathPlayer(LivingDeathEvent event) {
 Entity from = event.source.getSourceOfDamage();//Кто убил.
 EntityLivingBase to = event.entityLiving;//Кого убили.
 if (from instanceof EntityPlayerMP && to instanceof EntityPlayer) {
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get((EntityPlayerMP)from);
 if (cpk == null) return;
 cpk.killedPlayer();
 MessageCountPlayerKills message = new MessageCountPlayerKills();
 message.playerKills = cpk.getPlayerKills();
 SMTCommon.network.sendTo(message, (EntityPlayerMP)from);
 }
 }

 @SubscribeEvent
 public void sendInJoinWorld(EntityJoinWorldEvent event) {
 if (event.entity instanceof EntityPlayerMP) {
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get((EntityPlayerMP)event.entity);
 if (cpk == null) return;
 MessageCountPlayerKills message = new MessageCountPlayerKills();
 message.playerKills = cpk.getPlayerKills();
 SMTCommon.network.sendTo(message, (EntityPlayerMP)event.entity);
 }
 }
Код:
static Minecraft mc = Minecraft.getMinecraft();

 @SubscribeEvent
 public void drawText(RenderGameOverlayEvent.Post event) {
 switch(event.type) {
 case TEXT:
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(mc.thePlayer);
 if (cpk == null) return;
 String text = StatCollector.translateToLocal(StatList.playerKillsStat.statId) + ": " + cpk.getPlayerKills() + ".";
 mc.fontRenderer.drawStringWithShadow(text,
 event.resolution.getScaledWidth() - mc.fontRenderer.getStringWidth(text), 
 0, 0xFFFFFF);
 break;
 default:break;
 }
 }
Код:
public class MessageCountPlayerKills implements IMessage {

 public int playerKills;

 public MessageCountPlayerKills() {}

 @Override
 public void toBytes(ByteBuf buf) {
 buf.writeInt(playerKills);
 }

 @Override
 public void fromBytes(ByteBuf buf) {
 playerKills = buf.readInt();
 }

 public static class Handler implements IMessageHandler<MessageCountPlayerKills, IMessage> {

 @Override
 public IMessage onMessage(MessageCountPlayerKills packet, MessageContext message) {
 if (message.side.isClient())
 act(packet);
 else
 act(message.getServerHandler().playerEntity, packet);
 return null;
 }

 @SideOnly(Side.CLIENT)
 private void act(MessageCountPlayerKills packet) {
 Minecraft mc = Minecraft.getMinecraft();
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(mc.thePlayer);
 if (cpk == null) return;
 cpk.setPlayerKills(packet.playerKills);
 }

 private void act(EntityPlayerMP player, MessageCountPlayerKills packet) {
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(player);
 if (cpk == null) return;
 cpk.setPlayerKills(packet.playerKills);

 }

 }

}
SMTCommon - главный класс
Код:
public static SimpleNetworkWrapper network;

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
 network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);
 network.registerMessage(MessageCountPlayerKills.Handler.class, MessageCountPlayerKills.class, id, Side.CLIENT);
 network.registerMessage(MessageCountPlayerKills.Handler.class, MessageCountPlayerKills.class, id++, Side.SERVER);
}



Не понимает id и id++ нету стринга!


timaxa007 написал(а):
Если использовать ванильное сохранение и отправку пакета:
Код:
 @SubscribeEvent
 public void drawText(RenderGameOverlayEvent.Post event) {
 switch(event.type) {
 case TEXT:
 String text = StatCollector.translateToLocal(StatList.playerKillsStat.statId) + ": " + mc.thePlayer.getStatFileWriter().writeStat(StatList.playerKillsStat) + ".";
 mc.fontRenderer.drawStringWithShadow(text,
 event.resolution.getScaledWidth() - mc.fontRenderer.getStringWidth(text), 
 0, 0xFFFFFF);
 break;
 default:break;
 }
 }

 @SubscribeEvent
 public void sendInDeathPlayer(LivingDeathEvent event) {
    Entity from = event.source.getSourceOfDamage();//Кто убил.
    EntityLivingBase to = event.entityLiving;//Кого убили.
    if (from instanceof EntityPlayer && to instanceof EntityPlayer) {
 mc.getNetHandler().addToSendQueue(new C16PacketClientStatus(C16PacketClientStatus.EnumState.REQUEST_STATS));
 }
[video=youtube]https://youtu.be/PatYBmbk9KY[/video]
Только вот после перезахода значение на клиенте будет равна нулю и обновляется если убить игрока или войти в GUI статистики игрока. Пробовал использовать PlayerLoggedInEvent и EntityJoinWorldEvent отправляя пакет C16PacketClientStatus, то получал краш, так что здесь нужно отправлять свой пакет (или свой IMessage). Так как пакет C16PacketClientStatus запрашивает всю статистику игрока (а там много значений).


MrKrabik написал(а):
Doc написал(а):
Создаешь IEEP для игрока.
В death эвенте чекаешь, что убил и убит игрок.
Добавляешь тому, кто убил + 1.
Для оверлея - просто выводишь число из IEEP.
Синхронизация - эвент на 2х сторонах, тогда синхронизацию не нужно +
+ когда заходишь отправлять на клиент число.

За пару минут можно такое написать. (Ну мааааксимум час)

Ну напиши
Пожалуйста.
Код:
public class CountPlayerKillsIEEP implements IExtendedEntityProperties {

 private static final String TAG = "CountPlayerKills";

 int playerKills = 0;

 @Override
 public void init(Entity entity, World world) {}

 public static void reg(EntityPlayer entity) {
 entity.registerExtendedProperties(TAG, new CountPlayerKillsIEEP());
 }

 public static CountPlayerKillsIEEP get(EntityPlayer entity) {
 return (CountPlayerKillsIEEP)entity.getExtendedProperties(TAG);
 }

 public void killedPlayer() {
 ++playerKills;
 }

 public void setPlayerKills(int playerKills) {
 this.playerKills = playerKills;;
 }

 public int getPlayerKills() {
 return playerKills;
 }

 @Override
 public void saveNBTData(NBTTagCompound nbt) {
 if (playerKills > 0)
 nbt.setInteger("PlayerKills", playerKills);
 }

 @Override
 public void loadNBTData(NBTTagCompound nbt) {
 if (nbt.hasKey("PlayerKills", NBT.TAG_INT))
 playerKills = nbt.getInteger("PlayerKills");
 }

}
Код:
 @SubscribeEvent
 public void addEntityConstructing(EntityEvent.EntityConstructing event) {
 if (event.entity instanceof EntityPlayer) {
 if (CountPlayerKillsIEEP.get((EntityPlayer)event.entity) == null)
 CountPlayerKillsIEEP.reg((EntityPlayer)event.entity);
 }
 }

 @SubscribeEvent
 public void sendInDeathPlayer(LivingDeathEvent event) {
 Entity from = event.source.getSourceOfDamage();//Кто убил.
 EntityLivingBase to = event.entityLiving;//Кого убили.
 if (from instanceof EntityPlayerMP && to instanceof EntityPlayer) {
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get((EntityPlayerMP)from);
 if (cpk == null) return;
 cpk.killedPlayer();
 MessageCountPlayerKills message = new MessageCountPlayerKills();
 message.playerKills = cpk.getPlayerKills();
 SMTCommon.network.sendTo(message, (EntityPlayerMP)from);
 }
 }

 @SubscribeEvent
 public void sendInJoinWorld(EntityJoinWorldEvent event) {
 if (event.entity instanceof EntityPlayerMP) {
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get((EntityPlayerMP)event.entity);
 if (cpk == null) return;
 MessageCountPlayerKills message = new MessageCountPlayerKills();
 message.playerKills = cpk.getPlayerKills();
 SMTCommon.network.sendTo(message, (EntityPlayerMP)event.entity);
 }
 }
Код:
static Minecraft mc = Minecraft.getMinecraft();

 @SubscribeEvent
 public void drawText(RenderGameOverlayEvent.Post event) {
 switch(event.type) {
 case TEXT:
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(mc.thePlayer);
 if (cpk == null) return;
 String text = StatCollector.translateToLocal(StatList.playerKillsStat.statId) + ": " + cpk.getPlayerKills() + ".";
 mc.fontRenderer.drawStringWithShadow(text,
 event.resolution.getScaledWidth() - mc.fontRenderer.getStringWidth(text), 
 0, 0xFFFFFF);
 break;
 default:break;
 }
 }
Код:
public class MessageCountPlayerKills implements IMessage {

 public int playerKills;

 public MessageCountPlayerKills() {}

 @Override
 public void toBytes(ByteBuf buf) {
 buf.writeInt(playerKills);
 }

 @Override
 public void fromBytes(ByteBuf buf) {
 playerKills = buf.readInt();
 }

 public static class Handler implements IMessageHandler<MessageCountPlayerKills, IMessage> {

 @Override
 public IMessage onMessage(MessageCountPlayerKills packet, MessageContext message) {
 if (message.side.isClient())
 act(packet);
 else
 act(message.getServerHandler().playerEntity, packet);
 return null;
 }

 @SideOnly(Side.CLIENT)
 private void act(MessageCountPlayerKills packet) {
 Minecraft mc = Minecraft.getMinecraft();
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(mc.thePlayer);
 if (cpk == null) return;
 cpk.setPlayerKills(packet.playerKills);
 }

 private void act(EntityPlayerMP player, MessageCountPlayerKills packet) {
 CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get(player);
 if (cpk == null) return;
 cpk.setPlayerKills(packet.playerKills);

 }

 }

}
SMTCommon - главный класс
Код:
public static SimpleNetworkWrapper network;

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
 network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID);
 network.registerMessage(MessageCountPlayerKills.Handler.class, MessageCountPlayerKills.class, id, Side.CLIENT);
 network.registerMessage(MessageCountPlayerKills.Handler.class, MessageCountPlayerKills.class, id++, Side.SERVER);
}



При смерти cтатистика очищается (заместо id и id++ я написал 2)
Как поможешь говори qiwi и 200 рублей твой!
 

timaxa007

Модератор
5,831
409
672
MrKrabik написал(а):
Не понимает id и id++ нету стринга!
Это id в int типе. Если у тебя нету регистрации этих сообщений, то обычно начинать от 0.

MrKrabik написал(а):
При смерти cтатистика очищается
Да, опять забыл про Эвент PlayerEvent.Clone:
Код:
	@SubscribeEvent
	public void cloneCountPlayerKills(PlayerEvent.Clone event) {
		CountPlayerKillsIEEP cpk = CountPlayerKillsIEEP.get((EntityPlayer)event.original);
		if (cpk == null) return;
		CountPlayerKillsIEEP new_cpk = CountPlayerKillsIEEP.get((EntityPlayer)event.entityPlayer);
		if (new_cpk == null) return;
		new_cpk.setPlayerKills(cpk.getPlayerKills());
	}
 
929
30
66
Не работает,может что не так?Пакеты зарегал.
Java:
public class CountZombieKillsIEEP implements IExtendedEntityProperties {

    private static final String TAG = "CountzombieKills";

    public int zombieKills = 0;

    @Override
    public void init(Entity entity, World world) {}

    public static void reg(EntityZombie entity) {
        entity.registerExtendedProperties(TAG, new CountZombieKillsIEEP());
    }

    public static CountZombieKillsIEEP get(EntityPlayer entity) {
        return (CountZombieKillsIEEP)entity.getExtendedProperties(TAG);
    }

    public void killedPlayer() {
        ++zombieKills;
    }
    public void setzombieKills(int zombieKills) {
        this.zombieKills = zombieKills;;
    }

    public int getzombieKills() {
        return zombieKills;
    }

    @Override
    public void saveNBTData(NBTTagCompound nbt) {
        if (zombieKills > 0)
            nbt.setInteger("ZombieKills", zombieKills);
    }
    @Override
    public void loadNBTData(NBTTagCompound nbt) {
        if (nbt.hasKey("ZombieKills", NBT.TAG_INT))
            zombieKills = nbt.getInteger("ZombieKills");
    }

    public void setZombieKills(int zombieKills) {
        // TODO Auto-generated method stub
        
    }

    public static Object get(EntityZombie entity) {
        // TODO Auto-generated method stub
        return null;
    }
}

Код:
public class MessageCountZombieKills implements IMessage {

    public int zombieKills;

    public MessageCountZombieKills() {}

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(zombieKills);
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        zombieKills = buf.readInt();
    }

    public static class Handler implements IMessageHandler<MessageCountZombieKills, IMessage> {

        @Override
        public IMessage onMessage(MessageCountZombieKills packet, MessageContext message) {
            if (message.side.isClient())
                act(packet);
            else
                act(message.getServerHandler().playerEntity, packet);
            return null;
        }

        @SideOnly(Side.CLIENT)
        private void act(MessageCountZombieKills packet) {
            Minecraft mc = Minecraft.getMinecraft();
            CountZombieKillsIEEP cpk = CountZombieKillsIEEP.get(mc.thePlayer);
            if (cpk == null) return;
            cpk.setzombieKills(packet.zombieKills);
        }

        private void act(EntityPlayerMP player, MessageCountZombieKills packet) {
            CountZombieKillsIEEP cpk = CountZombieKillsIEEP.get(player);
            if (cpk == null) return;
            cpk.setzombieKills(packet.zombieKills);

        }

    }

}

Код:
@SubscribeEvent
public void addEntityConstructing1(EntityEvent.EntityConstructing event) {
    if (event.entity instanceof EntityZombie) {
        if (CountZombieKillsIEEP.get((EntityZombie)event.entity) == null)
            CountZombieKillsIEEP.reg((EntityZombie)event.entity);
    }
}

@SubscribeEvent
public void sendInDeathPlayer1(LivingDeathEvent event) {
    Entity from = event.source.getSourceOfDamage();//Кто убил.
    EntityLivingBase to = event.entityLiving;//Кого убили.
    if (from instanceof EntityPlayerMP && to instanceof EntityZombie) {
        CountZombieKillsIEEP cpk = CountZombieKillsIEEP.get((EntityPlayerMP)from);
        if (cpk == null) return;
        cpk.killedPlayer();
        MessageCountZombieKills message = new MessageCountZombieKills();
        message.zombieKills = cpk.getzombieKills();
        bestfoxy.network.sendTo(message, (EntityPlayerMP)from);
    }
}

@SubscribeEvent
public void sendInJoinWorld1(EntityJoinWorldEvent event) {
    if (event.entity instanceof EntityPlayerMP) {
        CountZombieKillsIEEP cpk = CountZombieKillsIEEP.get((EntityPlayerMP)event.entity);
        if (cpk == null) return;
        MessageCountZombieKills message = new MessageCountZombieKills();
        message.zombieKills = cpk.getzombieKills();
        bestfoxy.network.sendTo(message, (EntityPlayerMP)event.entity);
    }
}

Код:
@SubscribeEvent
public void cloneCountZombieKills(PlayerEvent.Clone event) {
    CountZombieKillsIEEP cpk = CountZombieKillsIEEP.get((EntityPlayer)event.original);
    if (cpk == null) return;
    CountPlayerKillsIEEP new_cpk = CountPlayerKillsIEEP.get((EntityPlayer)event.entityPlayer);
    if (new_cpk == null) return;
    new_cpk.setPlayerKills(cpk.getzombieKills());
}
}
 

timaxa007

Модератор
5,831
409
672
Что для зомби? Чтобы в зомби записывалось или в игрока записывалось сколько он убил?
Если первое, то нужно по другому делать, если второе, зачем всё переделывать для зоби, а не для игрока?
 
Сверху