Ошибка.

Версия Minecraft
1.7.10
API
Forge
У меня есть код который должен по сути работаь и на сервере ,но он не работает .Я так понимаю,что потому что всё происходит со стороны клиента ,но должны быть со стороны сервера .Всё аннотациями помечено ,все зарегано ,но пишет что всё происходит со стороны клиента.Помогите пожалуйста решить проблему
g:
@SideOnly(Side.SERVER)
public class RenderJoiner {

    public static ResourceLocation textures = new ResourceLocation(ClanWar.MODID, "/textures/img.png");
    public static boolean isTick = false;
    public static int width = -500;

    public static boolean onStart = true;
    public static boolean render = true;

    @SubscribeEvent(priority = EventPriority.LOWEST)
    public void eventHandler(RenderGameOverlayEvent event) {
        Minecraft.getMinecraft().renderEngine.bindTexture(textures);
        if(needRender) {
            GL11.glPushMatrix();
            GL11.glScaled(0.3, 0.1, 0.1);
            Minecraft.getMinecraft().ingameGUI.drawTexturedModalRect(width, 300, 0, 0, 253, 250);
            if(width != -5 && render) {
                width++;
            } else if(width != -500 && moving) {
                width--;
                onStart = true;
            } else if(width == -500 && onStart){
                onStart = false;
                needRender = false;
            }
            GL11.glPopMatrix();
        }
        isTick = true;
        GL11.glPushMatrix();
        GL11.glScaled(0.45, 0.45, 0.45);
        Minecraft.getMinecraft().fontRenderer.drawString("You were invited to the clan", width, 300, 0xffffff);
        Minecraft.getMinecraft().fontRenderer.drawString("For accept invited need just ", width, 300, 0xffffff);
        Minecraft.getMinecraft().fontRenderer.drawString("Pressed key Ctrl + Y", width, 300, 0xffffff);
        GL11.glPopMatrix();
    }
}
register:
    public void preInit(FMLPreInitializationEvent event) {
        MinecraftForge.EVENT_BUS.register(new RenderJoiner());
        FMLCommonHandler.instance().bus().register(new Tick());
        ClanWar.NETWORK.registerMessage(new ClientPacket.Handler(), ClientPacket.class, 0, Side.CLIENT);
        ClanWar.NETWORK.registerMessage(new RenderOverlay.Handler(), RenderOverlay.class, 1, Side.CLIENT);
        ClanWar.NETWORK.registerMessage(new BackFunction.Handler(), BackFunction.class, 2, Side.CLIENT);
    }
tick:
@SideOnly(Side.SERVER)
public class Tick {

    private int time;
    public static boolean moving = false;
    public static int times;
    public static boolean stopRender = false;



    @SubscribeEvent
    public void onTick(TickEvent.PlayerTickEvent event) {
        time++;
        Minecraft minecraft = Minecraft.getMinecraft();

        if(time % (20 * 40) == 0 && isTick) {
            if(width == -500 && moving){
                moving = false;
                render = true;
            } else if(width != -500 && !moving) {
                moving = true;
                render = false;

            }
        }
    }

}
 
338
14
110
Minecraft - клиентский класс. На сервере он отсутствует.
@SideOnly(Side.SERVER) public class Render
Рендер на сервере? Это как, в консоль?
Также слушатели событий, судя по всему, подключаются с обоих сторон: и на сервере, и на клиенте (для разделения придумали прокси), но так как сама логика кода перемешана, то это даже нельзя однозначно назвать ошибкой, скорее, штрих для полноты картины.

Код также содержит неиспользуемые переменные.
 
Последнее редактирование:
338
14
110
Распиши, пожалуйста, пошагово, в контексте варианта использования, что у тебя делает клиент, а что сервер, пока я вижу попытку запуска чисто клиентской логики рендера на серверной стороне (это ошибка - не будем рассматривать облачный гейминг или ещё нечто подобное).
 
338
14
110
Рендер должен рендерить
Я имею в виду то, какие функции ты делегируешь серверу, а какие - клиенту.
Не "какие процессору, а какие - видеокарте".
Мне кажется, имеет смысл сначала продумать взаимодействие этих сторон, ещё до написания кода. Ошибка выше происходит из-за того, что ты требуешь от сервера выполнять клиентскую логику, это невозможно в рамках обычного MC.
 

TheAndrey

Редактор учебника
1,071
72
372
1,329
104
225
ошибка с тиками возникает
Со скрина ничего не ясно. Предположу, что ошибка логическая - проверь логику работы своего кода.
использовать isRemote
??? Где ты там собрался его использовать?
SideOnly помечает стороны использования класса/метода. И обычно эта пометка класса/метода, что он клиентский, и сервер его не использует.
 
338
14
110
Да... Это решил , теперь у меня ошибка с тиками возникает
Зачем тебе переменная minecraft, если ты её никак не используешь? Она может быть объявлена только на стороне клиента, к тому же.
 
1,038
57
229
Сверху