Таймер перезарядки один для всех на сервере

svk

1,185
3
Есть код, который даёт задержку для выстрела, если вы переключились с 1 оружия на другое:
Код:
package com.svk.industrialGuns.Event;

import com.svk.industrialGuns.base.CommonProxy;
import com.svk.industrialGuns.guns.Guns;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class EventReloadGun 
{
    @SideOnly(Side.CLIENT)
    private ItemStack current = null;
    
    @SubscribeEvent
    public void TickEvent(TickEvent.PlayerTickEvent e) 
    {    
        EntityPlayer player = e.player;
        if(player.worldObj.isRemote)
        {
            if(player.getCurrentEquippedItem() != null && e.player.getCurrentEquippedItem().getItem() instanceof Guns)
            {
                if(current != null && player.getCurrentEquippedItem().getItem() != current.getItem())
                {
                    CommonProxy.packetSender.sendToServer(CommonProxy.packetSender.createPacket((byte)2));
                }
            }
            
            current = player.getCurrentEquippedItem();
        }
    }
}

И в PaketHandler:
Код:
        if(id == 2)
        {
            if(player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof Guns)
            {
                player.getEntityData().getCompoundTag("industrialGuns").setLong("lastShot", (long) (System.currentTimeMillis() + 5000));
            }
        }

Так вот, на сервере, если один игрок держит другое оружие, то у другого оружие не стреляет.

Почему?
[merge_posts_bbcode]Добавлено: 12.07.2015 16:39:34[/merge_posts_bbcode]

По идее переменная, current должна быть уникальная на каждом клиенте.
 
Глупая идея. Сделать папу с ключем ююайди игрока и значением итемстак. При таком даже пакеты не нужны.
 
Это для меня сложно :D

А можно определить какой слот держит игрок? Тогда можно бы было записывать это в нбт энтити и орудовать им на сервере.
[merge_posts_bbcode]Добавлено: 12.07.2015 17:00:24[/merge_posts_bbcode]

player.inventory.currentItem

[merge_posts_bbcode]Добавлено: 12.07.2015 17:09:44[/merge_posts_bbcode]

Код:
package com.svk.industrialGuns.Event;

import com.svk.industrialGuns.base.BaseClassMod;
import com.svk.industrialGuns.base.CommonProxy;
import com.svk.industrialGuns.guns.Guns;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class EventReloadGun 
{    
    @SubscribeEvent
    public void TickEvent(TickEvent.PlayerTickEvent e) 
    {    
        if(BaseClassMod.Server)
        {
            if(!e.player.worldObj.isRemote)
            {
                EntityPlayer player = e.player;
                int currentSlot =  player.inventory.currentItem;
                
                if(player.getCurrentEquippedItem() != null && e.player.getCurrentEquippedItem().getItem() instanceof Guns)
                {
                    if(currentSlot != player.getEntityData().getCompoundTag("industrialGuns").getInteger("currentSlot"))
                    {
                        player.getEntityData().getCompoundTag("industrialGuns").setLong("lastShot", (long) (System.currentTimeMillis() + 5000));
                    }
                }
                
                player.getEntityData().getCompoundTag("industrialGuns").setInteger("currentSlot", player.inventory.currentItem);
            }
        }
    }
}

Сделал так, пойду тестить на сервере...
 
У тебя проблема с пониманием синглтонов, ололо.
 
Проблема в том, что ты перед отправкой пакета не чекаешь, что player == Minecraft.getMinecraft().thePlayer.
P.S: +2 Агравейну.
 
Назад
Сверху