Ich entwickle meine eigene Version eines Minecraft -Servers mithilfe der Netty -Bibliothek.
Nach dem Implementieren aller Handshake -Materie stecke ich beim Senden des Registrierungsdatenpakets fest. Paketstruktur von 'Registry Data'. Der Code, den ich verwende, um diese Registrierung an den Client zu senden: < /p>
Ich entwickle meine eigene Version eines Minecraft -Servers mithilfe der Netty -Bibliothek. Nach dem Implementieren aller Handshake -Materie stecke ich beim Senden des Registrierungsdatenpakets fest. Paketstruktur von 'Registry Data'. Der Code, den ich verwende, um diese Registrierung an den Client zu senden: < /p> [code]private void sendBannerPatternRegistry(Channel client) { ByteBuf bannerPatternRegistry = Unpooled.buffer();
this.writeVarInt(bannerPatternRegistry, 0x07); // the id of the 'Registry Data' packet
this.writeString(bannerPatternRegistry, "minecraft:banner_pattern"); // the 'Registry ID'
// And now, we have a 'Prefixed Array' with all registry values
this.writeVarInt(bannerPatternRegistry, 1); // Here is a length of 'Prefixed Array'. It's 1 because we add only one value
// Now, we have to add the Id of registry entry this.writeString(bannerPatternRegistry, "minecraft:base");
// And here, we have to add the data of registry, witch it's 'Prefixed Optional NBT'
this.writeBoolean(bannerPatternRegistry, true); // This means that our value is present
Map bannerPatternData = new HashMap(); bannerPatternData.put("asset_id", "minecraft:diagonal_left"); bannerPatternData.put("translation_key", "block.minecraft.banner.diagonal_left.blue");
this.writeCompoundTag(bannerPatternRegistry, "", bannerPatternData); // Here we write the NBT data
client.writeAndFlush(bannerPatternData); } < /code> Hier sind alle Methoden, die ich verwende: < /p> public final void writeVarInt(ByteBuf buf, int value) { while ((value & 0xFFFFFF80) != 0L) { buf.writeByte((value & 0x7F) | 0x80); value >>>= 7; } buf.writeByte(value & 0x7F); }
public final void writeString(ByteBuf buf, String value) { byte[] bytes = value.getBytes(StandardCharsets.UTF_8); if (bytes.length > 32767 * 4) { throw new RuntimeException("String too long"); } this.writeVarInt(buf, bytes.length); buf.writeBytes(bytes); }
public final void writeBoolean(ByteBuf buf, boolean value) { buf.writeBoolean(value); } < /code> Und hier sind alle Methoden, die ich verwenden kann, um NBT und zu verzeichnen: < /p> private void writeTagHeader(ByteBuf out, TagType type, String name) { out.writeByte(type.getId()); if (type != TagType.END) { this.writeString(out, name); } }
private final int id; TagType(int id) { this.id = id; } public int getId() { return id; } } [/code] And, now, when I send this packet, I get the following error: [img]https://i.sstatic.net/QwIhrGnZ.png[/img]
Can someone help me with this error? Was habe ich falsch gemacht? Kann mir jemand mit einem Code -Beispiel helfen?
Ich versuche, einen Block zu erstellen, der mich in eine neue Dimension sendet, aber wenn ich versuche, mit der rechten Maustaste darauf zu klicken, passiert nichts. Im Moment verwende ich:
public...
Nach diesem Dokument konnte ich Python-Code in einer Java-Anwendung ausführen und auf Objekte von Java im Python-Code zugreifen.
Aber wenn ich dieselbe Logik verwende und es als Spigot-Plugin...
Hier ist mein Accessor:
@Mixin(targets = com.trongthang.bettercampfires.mixin.CampfireBlockEntityMixin )
public interface CampfireBlockEntityAccessor {