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

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

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

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

Q&A

解決済

1回答

773閲覧

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

yom

総合スコア1

Java

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

0グッド

0クリップ

投稿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}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問