drawStringでクラッシュする

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.317028)

drawStringでクラッシュする

投稿記事by micto » 2018年5月31日(木) 23:02

minecraft 1.12.2でテストmodを作っていたのですが、以下のコードで
mc.currentScreen.drawString(mc.fontRenderer, "Test", 3, 3, 0xFFFFFF);
のところでクラッシュします。
どなたか解決策を教えてください。
os : Windows 10
forge : 1.12.2 - 14.23.4.2705

クラッシュレポート(?)
Time: 5/31/18 10:39 PM
Description: Ticking player

java.lang.RuntimeException: No OpenGL context found in the current thread.
at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
at org.lwjgl.opengl.GL11.glEnable(GL11.java:1012)
at net.minecraft.client.renderer.GlStateManager$BooleanState.setState(GlStateManager.java:938)
at net.minecraft.client.renderer.GlStateManager$BooleanState.setEnabled(GlStateManager.java:927)
at net.minecraft.client.renderer.GlStateManager.enableAlpha(GlStateManager.java:67)
at net.minecraft.client.gui.FontRenderer.enableAlpha(FontRenderer.java:1002)
at net.minecraft.client.gui.FontRenderer.drawString(FontRenderer.java:327)
at net.minecraft.client.gui.FontRenderer.drawStringWithShadow(FontRenderer.java:311)
at net.minecraft.client.gui.Gui.drawString(Gui.java:135)
at com.micto.testmod.TestGui.OnPlayerTick(TestGui.java:31)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_ScoreLog_OnPlayerTick_PlayerTickEvent.invoke(.dynamic)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
at net.minecraftforge.fml.common.FMLCommonHandler.onPlayerPreTick(FMLCommonHandler.java:364)
at net.minecraft.entity.player.EntityPlayer.onUpdate(EntityPlayer.java:228)
at net.minecraft.entity.player.EntityPlayerMP.onUpdateEntity(EntityPlayerMP.java:423)
at net.minecraft.network.NetHandlerPlayServer.update(NetHandlerPlayServer.java:185)
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher$1.update(NetworkDispatcher.java:212)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:307)
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:197)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:865)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
at java.lang.Thread.run(Thread.java:745)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Client thread
Stacktrace:
at org.lwjgl.opengl.GLContext.getCapabilities(GLContext.java:124)
at org.lwjgl.opengl.GL11.glEnable(GL11.java:1012)
at net.minecraft.client.renderer.GlStateManager$BooleanState.setState(GlStateManager.java:938)
at net.minecraft.client.renderer.GlStateManager$BooleanState.setEnabled(GlStateManager.java:927)
at net.minecraft.client.renderer.GlStateManager.enableAlpha(GlStateManager.java:67)
at net.minecraft.client.gui.FontRenderer.enableAlpha(FontRenderer.java:1002)
at net.minecraft.client.gui.FontRenderer.drawString(FontRenderer.java:327)
at net.minecraft.client.gui.FontRenderer.drawStringWithShadow(FontRenderer.java:311)
at net.minecraft.client.gui.Gui.drawString(Gui.java:135)
at com.micto.testmod.TestGui.OnPlayerTick(TestGui.java:31)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_4_ScoreLog_OnPlayerTick_PlayerTickEvent.invoke(.dynamic)
at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
at net.minecraftforge.fml.common.FMLCommonHandler.onPlayerPreTick(FMLCommonHandler.java:364)
at net.minecraft.entity.player.EntityPlayer.onUpdate(EntityPlayer.java:228)

-- Player being ticked --
Details:
Entity Type: null (net.minecraft.entity.player.EntityPlayerMP)
Entity ID: 75
Entity Name: Player109
Entity's Exact location: -6.50, 65.00, -30.55
Entity's Block location: World: (-7,65,-31), Chunk: (at 9,4,1 in -1,-2; contains blocks -16,0,-32 to -1,255,-17), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1)
Entity's Momentum: 0.00, -0.08, 0.00
Entity's Passengers: []
Entity's Vehicle: ~~ERROR~~ NullPointerException: null
Stacktrace:
at net.minecraft.entity.player.EntityPlayerMP.onUpdateEntity(EntityPlayerMP.java:423)
at net.minecraft.network.NetHandlerPlayServer.update(NetHandlerPlayServer.java:185)
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher$1.update(NetworkDispatcher.java:212)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:307)

-- Ticking connection --
Details:
Connection: net.minecraft.network.NetworkManager@77212136
Stacktrace:
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:197)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:865)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
at java.lang.Thread.run(Thread.java:745)

-- System Details --
Details:
Minecraft Version: 1.12.2
Operating System: Windows 8.1 (amd64) version 6.3
Java Version: 1.8.0_25, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 814196872 bytes (776 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94
FML: MCP 9.42 Powered by Forge 14.23.4.2705 5 mods loaded, 5 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

| State | ID | Version | Source | Signature |
|:--------- |:--------- |:------------ |:-------------------------------- |:--------- |
| UCHIJAAAA | minecraft | 1.12.2 | minecraft.jar | None |
| UCHIJAAAA | mcp | 9.42 | minecraft.jar | None |
| UCHIJAAAA | FML | 8.0.99.99 | forgeSrc-1.12.2-14.23.4.2705.jar | None |
| UCHIJAAAA | forge | 14.23.4.2705 | forgeSrc-1.12.2-14.23.4.2705.jar | None |
| UCHIJAAAA | sl | 1.0 | bin | None |

Loaded coremods (and transformers):
GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
Profiler Position: N/A (disabled)
Player Count: 1 / 8; [EntityPlayerMP['Player109'/75, l='新規ワールド', x=-6.50, y=65.00, z=-30.55]]
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'

コード: 全て選択
package com.micto.testmod;

import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;

@EventBusSubscriber
public class TestGui {

   static EntityPlayerMP currentPlayer;
   static Minecraft mc = Minecraft.getMinecraft();

   @SubscribeEvent
   public static void entitySpawned (EntityJoinWorldEvent event) {

      Entity spawnedEntity = event.getEntity();

      if (spawnedEntity instanceof EntityPlayerMP) {
         currentPlayer = (EntityPlayerMP)spawnedEntity;
      }
   }

   @SubscribeEvent
   public static void OnPlayerTick (TickEvent.PlayerTickEvent event) {

      if (!currentPlayer.world.isRemote) {
         mc.currentScreen.drawString(mc.fontRenderer, "Test", 3, 3, 0xFFFFFF);
      }
   }
}
建築は大の苦手です
micto
ID:256c4618
水から上がったとこ
 
記事: 7
登録日時: 2017年1月15日(日) 00:05

  • (PostNo.317029)

Re: drawStringでクラッシュする

投稿記事by elise_blacklab » 2018年5月31日(木) 23:50

isRemoteがfalseのときってServerサイドですよ
ServerのThreadでGL操作したら落ちるでしょう
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:580b2e3c
掘り廃人
 
記事: 2543
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.317039)

Re: drawStringでクラッシュする

投稿記事by micto » 2018年6月01日(金) 16:19

しかし、
currentPlayer.world.isRemote
はずっとfalseのままです。
(シングルプレイでワールドに入ってprintlnで確かめました)
どうしたらtrueになりますか?
建築は大の苦手です
micto
ID:256c4618
水から上がったとこ
 
記事: 7
登録日時: 2017年1月15日(日) 00:05

  • (PostNo.317041)

Re: drawStringでクラッシュする

投稿記事by elise_blacklab » 2018年6月01日(金) 17:09

micto さんが書きました:しかし、
currentPlayer.world.isRemote
はずっとfalseのままです。
(シングルプレイでワールドに入ってprintlnで確かめました)
どうしたらtrueになりますか?

ということはそもそものcurrentPlayerはClient Threadに存在しないということが分かりますね
で,currentPlayerを取得する部分を見るとEntityPlayerMPだけ取得しています
EntityPlayerMPは他プレイヤーを表現する際にも使用されるもので,基本的にServerで使用されるものです
つまりServerで取得したインスタンスを使用している限り,isRemoteがtrueになることは絶対にないんです

そもそもEntityJoinやPlayerTickはServerサイドでのEntity操作を主としたEventであって描画系にはまず使いません
HUDを追加したいんでしたらRenderGameOverlay.Post等を普通は用います
https://github.com/TheGreyGhost/Minecra ... erlay.java
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:bbd6afba
掘り廃人
 
記事: 2543
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.317055)

Re: drawStringでクラッシュする

投稿記事by micto » 2018年6月01日(金) 23:17

表示できました!
最後にもう一つ質問ですが、ウィンドウサイズが変わっても表示位置が変わらないようにしたいのですが
drawstringのx, yにどんな値を入れたらいいですか?
建築は大の苦手です
micto
ID:256c4618
水から上がったとこ
 
記事: 7
登録日時: 2017年1月15日(日) 00:05

  • (PostNo.317109)

Re: drawStringでクラッシュする

投稿記事by frou01 » 2018年6月03日(日) 16:24

micto さんが書きました:表示できました!
最後にもう一つ質問ですが、ウィンドウサイズが変わっても表示位置が変わらないようにしたいのですが
drawstringのx, yにどんな値を入れたらいいですか?


FMLClientHandler.instance().getClient();でクライアントのインスタンスを取得
ScaledResolution scaledresolution = new ScaledResolution(minecraft, minecraft.displayWidth,minecraft.displayHeight);でGUIscaleを考慮した場合のウィンドウの情報を取得

scaledresolution.getScaledHeight();//縦
scaledresolution.getScaledWidth();//横

FontRendererのオブジェクト.getStringWidth(文字列);で表示する文字列の横幅
FontRendererのオブジェクト.FONT_HEIGHTが縦幅

この辺りは頭を使って処理を書いたほうが良いです。どんなふうに表示するのかもわからんし(左下とか右上とか中央とか。それぞれ処理が違う。)
HMGX・GVCX
どうです?ゲリラのニューモデルです。鬼畜でしょう?んああ仰らないで。全く外歩けない程弾が飛び交ってます。でも弱体化なんてネタは減るし、楽しさも無くなってろくな事はない。(HMGのパックを入れれば)バリエーションもたっぷりありますよ、どんな鬼畜好きの方でも大丈夫。どうぞ入れてみて下さい、いい銃声でしょう。余裕の弾幕だ、発射レートが違いますよ
frou01
ID:f9b20b78
石炭掘り
 
記事: 210
登録日時: 2015年5月29日(金) 21:43
お住まい: 塹壕陣地


Return to 質問:開発・制作関連

x