質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

Minecraftで座標を送信するModで、udpパケットがうまく作れない

yom
yom

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1回答

0グッド

0クリップ

208閲覧

投稿2022/12/06 03:55

前提

Minecraft JavaEditionでModを作っています。(1.8.9)
Playerの座標を手に入れたのち、UDPで送信しているのですが下部のデータしか受信できません。
Playerを動かしても、値は変わりませんでした。
pythonで受信はしました。

受信データ

b'-3864401'

該当のソースコード

CoordinateEvent.java

java

1import net.minecraft.client.Minecraft; 2import net.minecraft.util.MathHelper; 3import net.minecraftforge.client.event.RenderGameOverlayEvent; 4import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; 5 6import java.io.IOException; 7import java.net.DatagramPacket; 8import java.net.DatagramSocket; 9import java.net.InetSocketAddress; 10 11 12public class CoordinateEvent { 13 private static Minecraft mc; 14 int myPosX; 15 int myPosY; 16 int myPosZ; 17 18 public CoordinateEvent(Minecraft minecraft){ 19 mc = minecraft; 20 } 21 22 private void playerCoords(){ 23 this.myPosX = MathHelper.floor_double(mc.thePlayer.posX); 24 this.myPosY = MathHelper.floor_double(mc.thePlayer.posY); 25 this.myPosZ = MathHelper.floor_double(mc.thePlayer.posZ); 26 } 27 28 @SubscribeEvent 29 public void sendPacketEvent(RenderGameOverlayEvent event) throws IOException { 30 playerCoords(); 31 String x = String.valueOf(this.myPosX); 32 String y = String.valueOf(this.myPosY); 33 String z = String.valueOf(this.myPosZ); 34 StringBuffer buf = new StringBuffer(); 35 buf.append(x); 36 buf.append(y); 37 buf.append(z); 38 String sendData = buf.toString(); 39 byte[] data = sendData.getBytes("UTF-8"); 40 DatagramSocket sock = new DatagramSocket(); 41 DatagramPacket packet = new DatagramPacket(data,data.length,new InetSocketAddress("localhost",12156)); 42 sock.send(packet); 43 sock.close(); 44 } 45}

ExampleMod.java

java

1import net.minecraft.client.Minecraft; 2import net.minecraft.init.Blocks; 3import net.minecraftforge.common.MinecraftForge; 4import net.minecraftforge.fml.common.Mod; 5import net.minecraftforge.fml.common.Mod.EventHandler; 6import net.minecraftforge.fml.common.event.FMLInitializationEvent; 7import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; 8 9@Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION) 10public class ExampleMod 11{ 12 public static final String MODID = "examplemod"; 13 public static final String VERSION = "1.0"; 14 15 @EventHandler 16 public void init(FMLInitializationEvent event) { 17 // some example code 18 System.out.println("DIRT BLOCK >> "+Blocks.dirt.getUnlocalizedName()); 19 20 } 21 22 @EventHandler 23 public void preInit(FMLPreInitializationEvent event){ 24 MinecraftForge.EVENT_BUS.register(new CoordinateEvent(Minecraft.getMinecraft())); 25 } 26}

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

0

自己解決

buf.append(x);
buf.append(",");
buf.append(y);
buf.append(",");
buf.append(z);
こうすれば普通にできた()
まあただ、socketをいちいち作っているのでaddrが変わりまくるけどね。
普通にclass内で代入すればいい気がする。

投稿2022/12/06 04:12

編集2022/12/06 04:13
yom

総合スコア1

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。