Network
This commit is contained in:
parent
ca41720a9c
commit
74192a7f8b
|
|
@ -208,7 +208,7 @@ public abstract class WDScreen extends Screen {
|
||||||
else if(Mouse.getEventButton() == -1)
|
else if(Mouse.getEventButton() == -1)
|
||||||
onMouseMove(x, y);
|
onMouseMove(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleKeyboardInput() throws IOException {
|
public void handleKeyboardInput() throws IOException {
|
||||||
super.handleKeyboardInput();
|
super.handleKeyboardInput();
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,9 @@ import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
import net.montoyo.wd.WebDisplays;
|
import net.montoyo.wd.WebDisplays;
|
||||||
|
import net.montoyo.wd.net.Messages;
|
||||||
import net.montoyo.wd.net.client.CMessageOpenGui;
|
import net.montoyo.wd.net.client.CMessageOpenGui;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
@ -34,7 +36,7 @@ public abstract class GuiData {
|
||||||
public abstract String getName();
|
public abstract String getName();
|
||||||
|
|
||||||
public void sendTo(ServerPlayer player) {
|
public void sendTo(ServerPlayer player) {
|
||||||
WebDisplays.NET_HANDLER.sendTo(new CMessageOpenGui(this), player);
|
Messages.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new CMessageOpenGui(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,11 @@ import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.network.NetworkRegistry;
|
import net.minecraftforge.network.NetworkRegistry;
|
||||||
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
import net.montoyo.wd.WebDisplays;
|
import net.montoyo.wd.WebDisplays;
|
||||||
import net.montoyo.wd.client.gui.GuiScreenConfig;
|
import net.montoyo.wd.client.gui.GuiScreenConfig;
|
||||||
import net.montoyo.wd.entity.TileEntityScreen;
|
import net.montoyo.wd.entity.TileEntityScreen;
|
||||||
|
import net.montoyo.wd.net.Messages;
|
||||||
import net.montoyo.wd.net.client.CMessageOpenGui;
|
import net.montoyo.wd.net.client.CMessageOpenGui;
|
||||||
import net.montoyo.wd.utilities.BlockSide;
|
import net.montoyo.wd.utilities.BlockSide;
|
||||||
import net.montoyo.wd.utilities.Log;
|
import net.montoyo.wd.utilities.Log;
|
||||||
|
|
@ -78,8 +80,8 @@ public class ScreenConfigData extends GuiData {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendTo(NetworkRegistry.TargetPoint tp) {
|
public void sendTo(PacketDistributor.TargetPoint tp) {
|
||||||
WebDisplays.NET_HANDLER.sendToAllAround(new CMessageOpenGui(this), tp);
|
Messages.INSTANCE.send(PacketDistributor.NEAR.with(() -> tp), new CMessageOpenGui(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ import net.minecraft.util.EnumActionResult;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.SoundCategory;
|
import net.minecraft.util.SoundCategory;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
import net.montoyo.wd.WebDisplays;
|
import net.montoyo.wd.WebDisplays;
|
||||||
import net.montoyo.wd.core.CraftComponent;
|
import net.montoyo.wd.core.CraftComponent;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,8 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||||
import net.minecraftforge.network.NetworkRegistry;
|
import net.minecraftforge.network.NetworkRegistry;
|
||||||
import net.minecraftforge.network.simple.SimpleChannel;
|
import net.minecraftforge.network.simple.SimpleChannel;
|
||||||
import net.montoyo.wd.net.client.CMessageACResult;
|
import net.montoyo.wd.net.client.*;
|
||||||
|
import net.montoyo.wd.net.server.*;
|
||||||
|
|
||||||
public class Messages {
|
public class Messages {
|
||||||
|
|
||||||
|
|
@ -28,12 +29,21 @@ public class Messages {
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void registryNetworkPackets (FMLClientSetupEvent event) {
|
public static void registryNetworkPackets (FMLClientSetupEvent event) {
|
||||||
INSTANCE.registerMessage(index++, CMessageACResult.class, CMessageACResult::encode, CMessageACResult::decode, CMessageACResult::handle);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void registryNetworkPackets (FMLCommonSetupEvent event) {
|
public static void registryNetworkPackets (FMLCommonSetupEvent event) {
|
||||||
|
INSTANCE.registerMessage(index++, CMessageACResult.class, CMessageACResult::encode, CMessageACResult::decode, CMessageACResult::handle);
|
||||||
|
INSTANCE.registerMessage(index++, CMessageAddScreen.class, CMessageAddScreen::encode, CMessageAddScreen::decode, CMessageAddScreen::handle);
|
||||||
|
INSTANCE.registerMessage(index++, CMessageCloseGui.class, CMessageCloseGui::encode, CMessageCloseGui::decode, CMessageCloseGui::handle);
|
||||||
|
INSTANCE.registerMessage(index++, CMessageJSResponse.class, CMessageJSResponse::encode, CMessageJSResponse::decode, CMessageJSResponse::handle);
|
||||||
|
INSTANCE.registerMessage(index++, CMessageMiniservKey.class, CMessageMiniservKey::encode, CMessageMiniservKey::decode, CMessageMiniservKey::handle);
|
||||||
|
INSTANCE.registerMessage(index++, CMessageScreenUpdate.class, CMessageScreenUpdate::encode, CMessageScreenUpdate::decode, CMessageScreenUpdate::handle);
|
||||||
|
INSTANCE.registerMessage(index++, CMessageServerInfo.class, CMessageServerInfo::encode, CMessageServerInfo::decode, CMessageServerInfo::handle);
|
||||||
|
INSTANCE.registerMessage(index++, SMessageACQuery.class, SMessageACQuery::encode, SMessageACQuery::decode, SMessageACQuery::handle);
|
||||||
|
INSTANCE.registerMessage(index++, SMessageMiniservConnect.class, SMessageMiniservConnect::encode, SMessageMiniservConnect::decode, SMessageMiniservConnect::handle);
|
||||||
|
INSTANCE.registerMessage(index++, SMessageRedstoneCtrl.class, SMessageRedstoneCtrl::encode, SMessageRedstoneCtrl::decode, SMessageRedstoneCtrl::handle);
|
||||||
|
INSTANCE.registerMessage(index++, SMessageRequestTEData.class, SMessageRequestTEData::encode, SMessageRequestTEData::decode, SMessageRequestTEData::handle);
|
||||||
|
INSTANCE.registerMessage(index++, SMessageScreenCtrl.class, SMessageScreenCtrl::encode, SMessageScreenCtrl::decode, SMessageScreenCtrl::handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,12 +37,19 @@ public class CMessageAddScreen {
|
||||||
screens = toSend;
|
screens = toSend;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decode(FriendlyByteBuf buf) {
|
public CMessageAddScreen(boolean clear, Vector3i pos, TileEntityScreen.Screen[] screens) {
|
||||||
clear = buf.readBoolean();
|
this.clear = clear;
|
||||||
pos = new Vector3i(buf);
|
this.pos = pos;
|
||||||
|
this.screens = screens;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CMessageAddScreen decode(FriendlyByteBuf buf) {
|
||||||
|
boolean clear = buf.readBoolean();
|
||||||
|
Vector3i pos = new Vector3i(buf);
|
||||||
|
|
||||||
int cnt = buf.readByte() & 7;
|
int cnt = buf.readByte() & 7;
|
||||||
|
|
||||||
screens = new TileEntityScreen.Screen[cnt];
|
TileEntityScreen.Screen[] screens = new TileEntityScreen.Screen[cnt];
|
||||||
for (int i = 0; i < cnt; i++) {
|
for (int i = 0; i < cnt; i++) {
|
||||||
screens[i] = new TileEntityScreen.Screen();
|
screens[i] = new TileEntityScreen.Screen();
|
||||||
screens[i].side = BlockSide.values()[buf.readByte()];
|
screens[i].side = BlockSide.values()[buf.readByte()];
|
||||||
|
|
@ -57,9 +64,11 @@ public class CMessageAddScreen {
|
||||||
for (int j = 0; j < numUpgrades; j++)
|
for (int j = 0; j < numUpgrades; j++)
|
||||||
screens[i].upgrades.add(buf.readItem());
|
screens[i].upgrades.add(buf.readItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new CMessageAddScreen(clear, pos, screens);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CMessageAddScreen encode(FriendlyByteBuf buf) {
|
public void encode(FriendlyByteBuf buf) {
|
||||||
buf.writeBoolean(clear);
|
buf.writeBoolean(clear);
|
||||||
pos.writeTo(buf);
|
pos.writeTo(buf);
|
||||||
buf.writeByte(screens.length);
|
buf.writeByte(screens.length);
|
||||||
|
|
@ -76,7 +85,6 @@ public class CMessageAddScreen {
|
||||||
for (ItemStack is : scr.upgrades)
|
for (ItemStack is : scr.upgrades)
|
||||||
buf.writeItem(is);
|
buf.writeItem(is);
|
||||||
}
|
}
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
|
|
||||||
|
|
@ -28,21 +28,20 @@ public class CMessageCloseGui {
|
||||||
blockSide = side;
|
blockSide = side;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decode(FriendlyByteBuf buf) {
|
public static CMessageCloseGui decode(FriendlyByteBuf buf) {
|
||||||
int x, y, z, side;
|
int x, y, z, side;
|
||||||
x = buf.readInt();
|
x = buf.readInt();
|
||||||
y = buf.readInt();
|
y = buf.readInt();
|
||||||
z = buf.readInt();
|
z = buf.readInt();
|
||||||
side = buf.readByte();
|
side = buf.readByte();
|
||||||
|
|
||||||
blockPos = new BlockPos(x, y, z);
|
BlockPos blockPos = new BlockPos(x, y, z);
|
||||||
if(side <= 0)
|
BlockSide blockSide = side <= 0 ? null : BlockSide.values()[side - 1];
|
||||||
blockSide = null;
|
|
||||||
else
|
return new CMessageCloseGui(blockPos, blockSide);
|
||||||
blockSide = BlockSide.values()[side - 1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public CMessageCloseGui encode(FriendlyByteBuf buf) {
|
public void encode(FriendlyByteBuf buf) {
|
||||||
buf.writeInt(blockPos.getX());
|
buf.writeInt(blockPos.getX());
|
||||||
buf.writeInt(blockPos.getY());
|
buf.writeInt(blockPos.getY());
|
||||||
buf.writeInt(blockPos.getZ());
|
buf.writeInt(blockPos.getZ());
|
||||||
|
|
@ -52,8 +51,6 @@ public class CMessageCloseGui {
|
||||||
} else {
|
} else {
|
||||||
buf.writeByte(blockSide.ordinal() + 1);
|
buf.writeByte(blockSide.ordinal() + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
|
|
||||||
|
|
@ -36,21 +36,29 @@ public class CMessageJSResponse {
|
||||||
errString = err;
|
errString = err;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decode(FriendlyByteBuf buf) {
|
public static CMessageJSResponse decode(FriendlyByteBuf buf) {
|
||||||
id = buf.readInt();
|
int id = buf.readInt();
|
||||||
type = JSServerRequest.fromID(buf.readByte());
|
JSServerRequest type = JSServerRequest.fromID(buf.readByte());
|
||||||
success = buf.readBoolean();
|
boolean success = buf.readBoolean();
|
||||||
|
|
||||||
|
byte[] data = null;
|
||||||
|
|
||||||
|
int errCode;
|
||||||
|
String errString;
|
||||||
|
|
||||||
if(success) {
|
if(success) {
|
||||||
data = new byte[buf.readByte()];
|
data = new byte[buf.readByte()];
|
||||||
buf.readBytes(data);
|
buf.readBytes(data);
|
||||||
|
|
||||||
|
return new CMessageJSResponse(id, type, data);
|
||||||
} else {
|
} else {
|
||||||
errCode = buf.readInt();
|
errCode = buf.readInt();
|
||||||
errString = buf.readUtf();
|
errString = buf.readUtf();
|
||||||
|
return new CMessageJSResponse(id, type, errCode, errString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CMessageJSResponse encode(FriendlyByteBuf buf) {
|
public void encode(FriendlyByteBuf buf) {
|
||||||
buf.writeInt(id);
|
buf.writeInt(id);
|
||||||
buf.writeByte(type.ordinal());
|
buf.writeByte(type.ordinal());
|
||||||
buf.writeBoolean(success);
|
buf.writeBoolean(success);
|
||||||
|
|
@ -62,7 +70,6 @@ public class CMessageJSResponse {
|
||||||
buf.writeInt(errCode);
|
buf.writeInt(errCode);
|
||||||
buf.writeUtf(errString);
|
buf.writeUtf(errString);
|
||||||
}
|
}
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
|
|
||||||
|
|
@ -21,15 +21,15 @@ public class CMessageMiniservKey {
|
||||||
encryptedKey = key;
|
encryptedKey = key;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decode(FriendlyByteBuf buf) {
|
public static CMessageMiniservKey decode(FriendlyByteBuf buf) {
|
||||||
encryptedKey = new byte[buf.readShort() & 0xFFFF];
|
byte[] encryptedKey = new byte[buf.readShort() & 0xFFFF];
|
||||||
buf.readBytes(encryptedKey);
|
buf.readBytes(encryptedKey);
|
||||||
|
return new CMessageMiniservKey(encryptedKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CMessageMiniservKey encode(FriendlyByteBuf buf) {
|
public CMessageMiniservKey encode(FriendlyByteBuf buf) {
|
||||||
buf.writeShort(encryptedKey.length);
|
buf.writeShort(encryptedKey.length);
|
||||||
buf.writeBytes(encryptedKey);
|
buf.writeBytes(encryptedKey);
|
||||||
return new CMessageMiniservKey(encryptedKey);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,15 @@
|
||||||
package net.montoyo.wd.net.client;
|
package net.montoyo.wd.net.client;
|
||||||
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.montoyo.wd.utilities.Log;
|
import net.montoyo.wd.utilities.Log;
|
||||||
import net.montoyo.wd.WebDisplays;
|
import net.montoyo.wd.WebDisplays;
|
||||||
import net.montoyo.wd.data.GuiData;
|
import net.montoyo.wd.data.GuiData;
|
||||||
import net.montoyo.wd.utilities.Util;
|
import net.montoyo.wd.utilities.Util;
|
||||||
|
|
||||||
public class CMessageOpenGui {
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class CMessageOpenGui implements Runnable {
|
||||||
|
|
||||||
private GuiData data;
|
private GuiData data;
|
||||||
|
|
||||||
|
|
@ -30,9 +33,8 @@ public class CMessageOpenGui {
|
||||||
data = (GuiData) Util.unserialize(buf, cls);
|
data = (GuiData) Util.unserialize(buf, cls);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void encode(FriendlyByteBuf buf) {
|
||||||
public CMessageOpenGui encode(FriendlyByteBuf buf) {
|
buf.writeUtf(data.getName());
|
||||||
ByteBufUtils.writeUTF8String(buf, data.getName());
|
|
||||||
Util.serialize(buf, data);
|
Util.serialize(buf, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,4 +43,7 @@ public class CMessageOpenGui {
|
||||||
WebDisplays.PROXY.displayGui(data);
|
WebDisplays.PROXY.displayGui(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
contextSupplier.get().enqueueWork(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -164,34 +164,39 @@ public class CMessageScreenUpdate {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decode(FriendlyByteBuf buf) {
|
public static CMessageScreenUpdate decode(FriendlyByteBuf buf) {
|
||||||
pos = new Vector3i(buf);
|
Vector3i pos = new Vector3i(buf);
|
||||||
side = BlockSide.values()[buf.readByte()];
|
BlockSide side = BlockSide.values()[buf.readByte()];
|
||||||
action = buf.readByte();
|
byte action = buf.readByte();
|
||||||
|
|
||||||
if(action == UPDATE_URL || action == UPDATE_TYPE || action == UPDATE_RUN_JS)
|
CMessageScreenUpdate message = new CMessageScreenUpdate();
|
||||||
string = buf.readUtf();
|
message.pos = pos;
|
||||||
else if(action == UPDATE_MOUSE) {
|
message.side = side;
|
||||||
mouseEvent = buf.readByte();
|
message.action = action;
|
||||||
|
|
||||||
if(mouseEvent != MOUSE_UP)
|
switch (action) {
|
||||||
vec2i = new Vector2i(buf);
|
case UPDATE_URL, UPDATE_TYPE, UPDATE_RUN_JS -> message.string = buf.readUtf();
|
||||||
} else if(action == UPDATE_RESOLUTION)
|
case UPDATE_MOUSE -> {
|
||||||
vec2i = new Vector2i(buf);
|
message.mouseEvent = buf.readByte();
|
||||||
else if(action == UPDATE_UPGRADES) {
|
if (message.mouseEvent != MOUSE_UP)
|
||||||
upgrades = new ItemStack[buf.readByte()];
|
message.vec2i = new Vector2i(buf);
|
||||||
|
}
|
||||||
|
case UPDATE_RESOLUTION -> message.vec2i = new Vector2i(buf);
|
||||||
|
case UPDATE_UPGRADES -> {
|
||||||
|
message.upgrades = new ItemStack[buf.readByte()];
|
||||||
|
for (int i = 0; i < message.upgrades.length; i++)
|
||||||
|
message.upgrades[i] = buf.readItem();
|
||||||
|
}
|
||||||
|
case UPDATE_JS_REDSTONE -> {
|
||||||
|
message.vec2i = new Vector2i(buf);
|
||||||
|
message.redstoneLevel = buf.readByte();
|
||||||
|
}
|
||||||
|
case UPDATE_OWNER -> message.owner = new NameUUIDPair(buf);
|
||||||
|
case UPDATE_ROTATION -> message.rotation = Rotation.values()[buf.readByte() & 3];
|
||||||
|
case UPDATE_AUTO_VOL -> message.autoVolume = buf.readBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
for(int i = 0; i < upgrades.length; i++)
|
return message;
|
||||||
upgrades[i] = buf.readItem();
|
|
||||||
} else if(action == UPDATE_JS_REDSTONE) {
|
|
||||||
vec2i = new Vector2i(buf);
|
|
||||||
redstoneLevel = buf.readByte();
|
|
||||||
} else if(action == UPDATE_OWNER)
|
|
||||||
owner = new NameUUIDPair(buf);
|
|
||||||
else if(action == UPDATE_ROTATION)
|
|
||||||
rotation = Rotation.values()[buf.readByte() & 3];
|
|
||||||
else if(action == UPDATE_AUTO_VOL)
|
|
||||||
autoVolume = buf.readBoolean();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ public class CMessageServerInfo {
|
||||||
miniservPort = msPort;
|
miniservPort = msPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decode(FriendlyByteBuf buf) {
|
public static CMessageServerInfo decode(FriendlyByteBuf buf) {
|
||||||
miniservPort = buf.readShort() & 0xFFFF;
|
return new CMessageServerInfo(buf.readShort() & 0xFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CMessageServerInfo encode(FriendlyByteBuf buf) {
|
public CMessageServerInfo encode(FriendlyByteBuf buf) {
|
||||||
|
|
|
||||||
|
|
@ -5,25 +5,19 @@
|
||||||
package net.montoyo.wd.net.server;
|
package net.montoyo.wd.net.server;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
import net.minecraftforge.network.PacketDistributor;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
|
||||||
import net.montoyo.wd.WebDisplays;
|
import net.montoyo.wd.WebDisplays;
|
||||||
import net.montoyo.wd.net.Message;
|
import net.montoyo.wd.net.Messages;
|
||||||
import net.montoyo.wd.net.client.CMessageACResult;
|
import net.montoyo.wd.net.client.CMessageACResult;
|
||||||
import net.montoyo.wd.utilities.NameUUIDPair;
|
import net.montoyo.wd.utilities.NameUUIDPair;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class SMessageACQuery {
|
public class SMessageACQuery implements Runnable {
|
||||||
|
|
||||||
private ServerPlayer player;
|
private ServerPlayer player;
|
||||||
private String beginning;
|
private String beginning;
|
||||||
|
|
@ -34,20 +28,18 @@ public class SMessageACQuery {
|
||||||
matchExact = exact;
|
matchExact = exact;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void decode(FriendlyByteBuf buf) {
|
public static SMessageACQuery decode(FriendlyByteBuf buf) {
|
||||||
beginning = buf.readUtf();
|
return new SMessageACQuery(buf.readUtf(), buf.readBoolean());
|
||||||
matchExact = buf.readBoolean();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public SMessageACQuery encode(FriendlyByteBuf buf) {
|
public void encode(FriendlyByteBuf buf) {
|
||||||
buf.writeUtf(beginning);
|
buf.writeUtf(beginning);
|
||||||
buf.writeBoolean(matchExact);
|
buf.writeBoolean(matchExact);
|
||||||
return new SMessageACQuery(beginning, matchExact);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
GameProfile[] profiles = ;
|
GameProfile[] profiles = WebDisplays.PROXY.getOnlineGameProfiles();
|
||||||
NameUUIDPair[] result;
|
NameUUIDPair[] result;
|
||||||
|
|
||||||
if(matchExact)
|
if(matchExact)
|
||||||
|
|
@ -57,18 +49,12 @@ public class SMessageACQuery {
|
||||||
result = Arrays.stream(profiles).filter(gp -> gp.getName().toLowerCase().startsWith(lBeg)).map(NameUUIDPair::new).toArray(NameUUIDPair[]::new);
|
result = Arrays.stream(profiles).filter(gp -> gp.getName().toLowerCase().startsWith(lBeg)).map(NameUUIDPair::new).toArray(NameUUIDPair[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
WebDisplays.NET_HANDLER.sendTo(new CMessageACResult(result), player);
|
Messages.INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), new CMessageACResult(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Handler implements IMessageHandler<SMessageACQuery, IMessage> {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
player = contextSupplier.get().getSender();
|
||||||
@Override
|
contextSupplier.get().enqueueWork(this);
|
||||||
public IMessage onMessage(SMessageACQuery msg, MessageContext ctx) {
|
|
||||||
msg.player = ctx.getServerHandler().player;
|
|
||||||
((WorldServer) msg.player.world).addScheduledTask(msg);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,18 +4,16 @@
|
||||||
|
|
||||||
package net.montoyo.wd.net.server;
|
package net.montoyo.wd.net.server;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
|
||||||
import net.montoyo.wd.miniserv.server.ClientManager;
|
import net.montoyo.wd.miniserv.server.ClientManager;
|
||||||
import net.montoyo.wd.miniserv.server.Server;
|
import net.montoyo.wd.miniserv.server.Server;
|
||||||
import net.montoyo.wd.net.Message;
|
import net.montoyo.wd.net.Messages;
|
||||||
import net.montoyo.wd.net.client.CMessageMiniservKey;
|
import net.montoyo.wd.net.client.CMessageMiniservKey;
|
||||||
|
|
||||||
@Message(messageId = 10, side = Side.SERVER)
|
import java.util.function.Supplier;
|
||||||
public class SMessageMiniservConnect implements IMessage {
|
|
||||||
|
public class SMessageMiniservConnect {
|
||||||
|
|
||||||
private byte[] modulus;
|
private byte[] modulus;
|
||||||
private byte[] exponent;
|
private byte[] exponent;
|
||||||
|
|
@ -28,35 +26,31 @@ public class SMessageMiniservConnect implements IMessage {
|
||||||
exponent = exp;
|
exponent = exp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static SMessageMiniservConnect decode(FriendlyByteBuf buf) {
|
||||||
public void fromBytes(ByteBuf buf) {
|
|
||||||
int sz = buf.readShort() & 0xFFFF;
|
int sz = buf.readShort() & 0xFFFF;
|
||||||
modulus = new byte[sz];
|
byte[] modulus = new byte[sz];
|
||||||
buf.readBytes(modulus);
|
buf.readBytes(modulus);
|
||||||
|
|
||||||
sz = buf.readShort() & 0xFFFF;
|
sz = buf.readShort() & 0xFFFF;
|
||||||
exponent = new byte[sz];
|
byte[] exponent = new byte[sz];
|
||||||
buf.readBytes(exponent);
|
buf.readBytes(exponent);
|
||||||
|
|
||||||
|
return new SMessageMiniservConnect(modulus, exponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void encode(FriendlyByteBuf buf) {
|
||||||
public void toBytes(ByteBuf buf) {
|
|
||||||
buf.writeShort(modulus.length);
|
buf.writeShort(modulus.length);
|
||||||
buf.writeBytes(modulus);
|
buf.writeBytes(modulus);
|
||||||
buf.writeShort(exponent.length);
|
buf.writeShort(exponent.length);
|
||||||
buf.writeBytes(exponent);
|
buf.writeBytes(exponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Handler implements IMessageHandler<SMessageMiniservConnect, IMessage> {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
ClientManager cliMgr = Server.getInstance().getClientManager();
|
||||||
|
byte[] encKey = cliMgr.encryptClientKey(contextSupplier.get().getSender().getGameProfile().getId(), modulus, exponent);
|
||||||
|
|
||||||
@Override
|
if (encKey != null) {
|
||||||
public IMessage onMessage(SMessageMiniservConnect msg, MessageContext ctx) {
|
Messages.INSTANCE.sendToServer(new CMessageMiniservKey(encKey));
|
||||||
ClientManager cliMgr = Server.getInstance().getClientManager();
|
|
||||||
byte[] encKey = cliMgr.encryptClientKey(ctx.getServerHandler().player.getGameProfile().getId(), msg.modulus, msg.exponent);
|
|
||||||
|
|
||||||
return encKey == null ? null : new CMessageMiniservKey(encKey);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,16 +5,25 @@
|
||||||
package net.montoyo.wd.net.server;
|
package net.montoyo.wd.net.server;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraftforge.common.ForgeMod;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.montoyo.wd.core.ScreenRights;
|
import net.montoyo.wd.core.ScreenRights;
|
||||||
import net.montoyo.wd.entity.TileEntityRedCtrl;
|
import net.montoyo.wd.entity.TileEntityRedCtrl;
|
||||||
import net.montoyo.wd.entity.TileEntityScreen;
|
import net.montoyo.wd.entity.TileEntityScreen;
|
||||||
|
|
@ -22,11 +31,12 @@ import net.montoyo.wd.net.Message;
|
||||||
import net.montoyo.wd.utilities.Util;
|
import net.montoyo.wd.utilities.Util;
|
||||||
import net.montoyo.wd.utilities.Vector3i;
|
import net.montoyo.wd.utilities.Vector3i;
|
||||||
|
|
||||||
@Message(messageId = 8, side = Side.SERVER)
|
import java.util.function.Supplier;
|
||||||
public class SMessageRedstoneCtrl implements IMessage, Runnable {
|
|
||||||
|
|
||||||
private EntityPlayer player;
|
public class SMessageRedstoneCtrl implements Runnable {
|
||||||
private int dimension;
|
|
||||||
|
private Player player;
|
||||||
|
private ResourceLocation dimension;
|
||||||
private Vector3i pos;
|
private Vector3i pos;
|
||||||
private String risingEdgeURL;
|
private String risingEdgeURL;
|
||||||
private String fallingEdgeURL;
|
private String fallingEdgeURL;
|
||||||
|
|
@ -34,7 +44,7 @@ public class SMessageRedstoneCtrl implements IMessage, Runnable {
|
||||||
public SMessageRedstoneCtrl() {
|
public SMessageRedstoneCtrl() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SMessageRedstoneCtrl(int d, Vector3i p, String r, String f) {
|
public SMessageRedstoneCtrl(ResourceLocation d, Vector3i p, String r, String f) {
|
||||||
dimension = d;
|
dimension = d;
|
||||||
pos = p;
|
pos = p;
|
||||||
risingEdgeURL = r;
|
risingEdgeURL = r;
|
||||||
|
|
@ -43,14 +53,14 @@ public class SMessageRedstoneCtrl implements IMessage, Runnable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
World world = player.world;
|
Level world = player.level;
|
||||||
BlockPos blockPos = pos.toBlock();
|
BlockPos blockPos = pos.toBlock();
|
||||||
final double maxRange = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue();
|
final double maxRange = player.getAttribute(ForgeMod.REACH_DISTANCE.get()).getValue();
|
||||||
|
|
||||||
if(world.provider.getDimension() != dimension || player.getDistanceSq(blockPos) > maxRange * maxRange)
|
if(!world.dimension().location().equals(dimension) || player.distanceToSqr(blockPos.getX(), blockPos.getY(), blockPos.getZ()) > maxRange * maxRange)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TileEntity te = player.world.getTileEntity(blockPos);
|
BlockEntity te = world.getBlockEntity(blockPos);
|
||||||
if(te == null || !(te instanceof TileEntityRedCtrl))
|
if(te == null || !(te instanceof TileEntityRedCtrl))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -70,30 +80,19 @@ public class SMessageRedstoneCtrl implements IMessage, Runnable {
|
||||||
redCtrl.setURLs(risingEdgeURL, fallingEdgeURL);
|
redCtrl.setURLs(risingEdgeURL, fallingEdgeURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static SMessageRedstoneCtrl decode(FriendlyByteBuf buf) {
|
||||||
public void fromBytes(ByteBuf buf) {
|
return new SMessageRedstoneCtrl(buf.readResourceLocation(), new Vector3i(buf), buf.readUtf(), buf.readUtf());
|
||||||
dimension = buf.readInt();
|
|
||||||
pos = new Vector3i(buf);
|
|
||||||
risingEdgeURL = ByteBufUtils.readUTF8String(buf);
|
|
||||||
fallingEdgeURL = ByteBufUtils.readUTF8String(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void encode(FriendlyByteBuf buf) {
|
||||||
public void toBytes(ByteBuf buf) {
|
buf.writeResourceLocation(dimension);
|
||||||
buf.writeInt(dimension);
|
|
||||||
pos.writeTo(buf);
|
pos.writeTo(buf);
|
||||||
ByteBufUtils.writeUTF8String(buf, risingEdgeURL);
|
buf.writeUtf(risingEdgeURL);
|
||||||
ByteBufUtils.writeUTF8String(buf, fallingEdgeURL);
|
buf.writeUtf(fallingEdgeURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Handler implements IMessageHandler<SMessageRedstoneCtrl, IMessage> {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
player = contextSupplier.get().getSender();
|
||||||
@Override
|
contextSupplier.get().enqueueWork(this);
|
||||||
public IMessage onMessage(SMessageRedstoneCtrl msg, MessageContext ctx) {
|
|
||||||
msg.player = ctx.getServerHandler().player;
|
|
||||||
((WorldServer) msg.player.world).addScheduledTask(msg);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,56 +5,61 @@
|
||||||
package net.montoyo.wd.net.server;
|
package net.montoyo.wd.net.server;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.montoyo.wd.utilities.Log;
|
|
||||||
import net.montoyo.wd.entity.TileEntityScreen;
|
import net.montoyo.wd.entity.TileEntityScreen;
|
||||||
import net.montoyo.wd.net.Message;
|
import net.montoyo.wd.utilities.Log;
|
||||||
import net.montoyo.wd.utilities.Vector3i;
|
import net.montoyo.wd.utilities.Vector3i;
|
||||||
|
|
||||||
@Message(messageId = 1, side = Side.SERVER)
|
import java.util.function.Supplier;
|
||||||
public class SMessageRequestTEData implements IMessage, Runnable {
|
|
||||||
|
|
||||||
private int dim;
|
public class SMessageRequestTEData implements Runnable {
|
||||||
|
|
||||||
|
private ResourceLocation dim;
|
||||||
private Vector3i pos;
|
private Vector3i pos;
|
||||||
private EntityPlayerMP player;
|
private ServerPlayer player;
|
||||||
|
|
||||||
public SMessageRequestTEData() {
|
public SMessageRequestTEData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SMessageRequestTEData(TileEntity te) {
|
public SMessageRequestTEData(BlockEntity te) {
|
||||||
dim = te.getWorld().provider.getDimension();
|
dim = te.getLevel().dimension().location();
|
||||||
pos = new Vector3i(te.getPos());
|
pos = new Vector3i(te.getBlockPos());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public SMessageRequestTEData(ResourceLocation dim, Vector3i pos) {
|
||||||
public void fromBytes(ByteBuf buf) {
|
this.dim = dim;
|
||||||
dim = buf.readInt();
|
this.pos = pos;
|
||||||
pos = new Vector3i(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static SMessageRequestTEData decode(FriendlyByteBuf buf) {
|
||||||
public void toBytes(ByteBuf buf) {
|
return new SMessageRequestTEData(buf.readResourceLocation(), new Vector3i(buf));
|
||||||
buf.writeInt(dim);
|
}
|
||||||
|
|
||||||
|
public void encode(FriendlyByteBuf buf) {
|
||||||
|
buf.writeResourceLocation(dim);
|
||||||
pos.writeTo(buf);
|
pos.writeTo(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if(player.world.provider.getDimension() != dim)
|
if(!player.level.dimension().location().equals(dim))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
BlockPos bp = pos.toBlock();
|
BlockPos bp = pos.toBlock();
|
||||||
if(player.getDistanceSq(bp) > 512.0 * 512.0)
|
if(player.distanceToSqr(bp.getX(), bp.getY(), bp.getZ()) > 512.0 * 512.0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TileEntity te = player.world.getTileEntity(bp);
|
BlockEntity te = player.level.getBlockEntity(bp);
|
||||||
if(te == null) {
|
if(te == null) {
|
||||||
Log.error("MesageRequestTEData: Can't request data of null tile entity at %s", pos.toString());
|
Log.error("MesageRequestTEData: Can't request data of null tile entity at %s", pos.toString());
|
||||||
return;
|
return;
|
||||||
|
|
@ -64,15 +69,8 @@ public class SMessageRequestTEData implements IMessage, Runnable {
|
||||||
((TileEntityScreen) te).requestData(player);
|
((TileEntityScreen) te).requestData(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Handler implements IMessageHandler<SMessageRequestTEData, IMessage> {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
player = contextSupplier.get().getSender();
|
||||||
@Override
|
contextSupplier.get().enqueueWork(this);
|
||||||
public IMessage onMessage(SMessageRequestTEData message, MessageContext ctx) {
|
|
||||||
message.player = ctx.getServerHandler().player;
|
|
||||||
((WorldServer) message.player.world).addScheduledTask(message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,29 @@
|
||||||
|
|
||||||
package net.montoyo.wd.net.server;
|
package net.montoyo.wd.net.server;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldServer;
|
import net.minecraft.world.WorldServer;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraftforge.common.ForgeMod;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.montoyo.wd.WebDisplays;
|
import net.montoyo.wd.WebDisplays;
|
||||||
import net.montoyo.wd.block.BlockPeripheral;
|
import net.montoyo.wd.block.BlockPeripheral;
|
||||||
import net.montoyo.wd.core.DefaultPeripheral;
|
import net.montoyo.wd.core.DefaultPeripheral;
|
||||||
|
|
@ -28,6 +37,8 @@ import net.montoyo.wd.entity.TileEntityScreen;
|
||||||
import net.montoyo.wd.net.Message;
|
import net.montoyo.wd.net.Message;
|
||||||
import net.montoyo.wd.utilities.*;
|
import net.montoyo.wd.utilities.*;
|
||||||
|
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@Message(messageId = 2, side = Side.SERVER)
|
@Message(messageId = 2, side = Side.SERVER)
|
||||||
public class SMessageScreenCtrl implements IMessage, Runnable {
|
public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
|
|
||||||
|
|
@ -48,12 +59,12 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
public static final int CTRL_SET_AUTO_VOL = 14;
|
public static final int CTRL_SET_AUTO_VOL = 14;
|
||||||
|
|
||||||
private int ctrl;
|
private int ctrl;
|
||||||
private int dim;
|
private ResourceLocation dim;
|
||||||
private Vector3i pos;
|
private Vector3i pos;
|
||||||
private BlockSide side;
|
private BlockSide side;
|
||||||
private String url;
|
private String url;
|
||||||
private NameUUIDPair friend;
|
private NameUUIDPair friend;
|
||||||
private EntityPlayerMP player;
|
private ServerPlayer player;
|
||||||
private int friendRights;
|
private int friendRights;
|
||||||
private int otherRights;
|
private int otherRights;
|
||||||
private Vector2i vec2i;
|
private Vector2i vec2i;
|
||||||
|
|
@ -73,8 +84,8 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
public static SMessageScreenCtrl setURL(TileEntityScreen tes, BlockSide side, String url, Vector3i remoteLocation) {
|
public static SMessageScreenCtrl setURL(TileEntityScreen tes, BlockSide side, String url, Vector3i remoteLocation) {
|
||||||
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
||||||
ret.ctrl = (remoteLocation == null) ? CTRL_SET_URL : CTRL_SET_URL_REMOTE;
|
ret.ctrl = (remoteLocation == null) ? CTRL_SET_URL : CTRL_SET_URL_REMOTE;
|
||||||
ret.dim = tes.getWorld().provider.getDimension();
|
ret.dim = tes.getLevel().dimension().location();
|
||||||
ret.pos = new Vector3i(tes.getPos());
|
ret.pos = new Vector3i(tes.getBlockPos());
|
||||||
ret.side = side;
|
ret.side = side;
|
||||||
ret.url = url;
|
ret.url = url;
|
||||||
|
|
||||||
|
|
@ -86,16 +97,16 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
|
|
||||||
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, NameUUIDPair friend, boolean del) {
|
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, NameUUIDPair friend, boolean del) {
|
||||||
ctrl = del ? CTRL_REMOVE_FRIEND : CTRL_ADD_FRIEND;
|
ctrl = del ? CTRL_REMOVE_FRIEND : CTRL_ADD_FRIEND;
|
||||||
dim = tes.getWorld().provider.getDimension();
|
dim = tes.getLevel().dimension().location();
|
||||||
pos = new Vector3i(tes.getPos());
|
pos = new Vector3i(tes.getBlockPos());
|
||||||
this.side = side;
|
this.side = side;
|
||||||
this.friend = friend;
|
this.friend = friend;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, int fr, int or) {
|
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, int fr, int or) {
|
||||||
ctrl = CTRL_SET_RIGHTS;
|
ctrl = CTRL_SET_RIGHTS;
|
||||||
dim = tes.getWorld().provider.getDimension();
|
dim = tes.getLevel().dimension().location();
|
||||||
pos = new Vector3i(tes.getPos());
|
pos = new Vector3i(tes.getBlockPos());
|
||||||
this.side = side;
|
this.side = side;
|
||||||
friendRights = fr;
|
friendRights = fr;
|
||||||
otherRights = or;
|
otherRights = or;
|
||||||
|
|
@ -103,16 +114,16 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
|
|
||||||
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, ItemStack toRem) {
|
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, ItemStack toRem) {
|
||||||
ctrl = CTRL_REMOVE_UPGRADE;
|
ctrl = CTRL_REMOVE_UPGRADE;
|
||||||
dim = tes.getWorld().provider.getDimension();
|
dim = tes.getLevel().dimension().location();
|
||||||
pos = new Vector3i(tes.getPos());
|
pos = new Vector3i(tes.getBlockPos());
|
||||||
this.side = side;
|
this.side = side;
|
||||||
toRemove = toRem;
|
toRemove = toRem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, Rotation rot) {
|
public SMessageScreenCtrl(TileEntityScreen tes, BlockSide side, Rotation rot) {
|
||||||
ctrl = CTRL_SET_ROTATION;
|
ctrl = CTRL_SET_ROTATION;
|
||||||
dim = tes.getWorld().provider.getDimension();
|
dim = tes.getLevel().dimension().location();
|
||||||
pos = new Vector3i(tes.getPos());
|
pos = new Vector3i(tes.getBlockPos());
|
||||||
this.side = side;
|
this.side = side;
|
||||||
rotation = rot;
|
rotation = rot;
|
||||||
}
|
}
|
||||||
|
|
@ -120,8 +131,8 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
public static SMessageScreenCtrl type(TileEntityScreen tes, BlockSide side, String text, BlockPos soundPos) {
|
public static SMessageScreenCtrl type(TileEntityScreen tes, BlockSide side, String text, BlockPos soundPos) {
|
||||||
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
||||||
ret.ctrl = CTRL_TYPE;
|
ret.ctrl = CTRL_TYPE;
|
||||||
ret.pos = new Vector3i(tes.getPos());
|
ret.pos = new Vector3i(tes.getBlockPos());
|
||||||
ret.dim = tes.getWorld().provider.getDimension();
|
ret.dim = tes.getLevel().dimension().location();
|
||||||
ret.side = side;
|
ret.side = side;
|
||||||
ret.text = text;
|
ret.text = text;
|
||||||
ret.soundPos = soundPos;
|
ret.soundPos = soundPos;
|
||||||
|
|
@ -135,8 +146,8 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
|
|
||||||
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
||||||
ret.ctrl = ctrl;
|
ret.ctrl = ctrl;
|
||||||
ret.pos = new Vector3i(tes.getPos());
|
ret.pos = new Vector3i(tes.getBlockPos());
|
||||||
ret.dim = tes.getWorld().provider.getDimension();
|
ret.dim = tes.getLevel().dimension().location();
|
||||||
ret.side = side;
|
ret.side = side;
|
||||||
ret.vec2i = vec;
|
ret.vec2i = vec;
|
||||||
|
|
||||||
|
|
@ -146,8 +157,8 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
public static SMessageScreenCtrl laserUp(TileEntityScreen tes, BlockSide side) {
|
public static SMessageScreenCtrl laserUp(TileEntityScreen tes, BlockSide side) {
|
||||||
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
||||||
ret.ctrl = CTRL_LASER_UP;
|
ret.ctrl = CTRL_LASER_UP;
|
||||||
ret.pos = new Vector3i(tes.getPos());
|
ret.pos = new Vector3i(tes.getBlockPos());
|
||||||
ret.dim = tes.getWorld().provider.getDimension();
|
ret.dim = tes.getLevel().dimension().location();
|
||||||
ret.side = side;
|
ret.side = side;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -156,8 +167,8 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
public static SMessageScreenCtrl jsRequest(TileEntityScreen tes, BlockSide side, int reqId, JSServerRequest reqType, Object ... data) {
|
public static SMessageScreenCtrl jsRequest(TileEntityScreen tes, BlockSide side, int reqId, JSServerRequest reqType, Object ... data) {
|
||||||
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
||||||
ret.ctrl = CTRL_JS_REQUEST;
|
ret.ctrl = CTRL_JS_REQUEST;
|
||||||
ret.pos = new Vector3i(tes.getPos());
|
ret.pos = new Vector3i(tes.getBlockPos());
|
||||||
ret.dim = tes.getWorld().provider.getDimension();
|
ret.dim = tes.getLevel().dimension().location();
|
||||||
ret.side = side;
|
ret.side = side;
|
||||||
ret.jsReqID = reqId;
|
ret.jsReqID = reqId;
|
||||||
ret.jsReqType = reqType;
|
ret.jsReqType = reqType;
|
||||||
|
|
@ -169,8 +180,8 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
public static SMessageScreenCtrl autoVol(TileEntityScreen tes, BlockSide side, boolean av) {
|
public static SMessageScreenCtrl autoVol(TileEntityScreen tes, BlockSide side, boolean av) {
|
||||||
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
SMessageScreenCtrl ret = new SMessageScreenCtrl();
|
||||||
ret.ctrl = CTRL_SET_AUTO_VOL;
|
ret.ctrl = CTRL_SET_AUTO_VOL;
|
||||||
ret.pos = new Vector3i(tes.getPos());
|
ret.pos = new Vector3i(tes.getBlockPos());
|
||||||
ret.dim = tes.getWorld().provider.getDimension();
|
ret.dim = tes.getLevel().dimension().location();
|
||||||
ret.side = side;
|
ret.side = side;
|
||||||
ret.autoVol = av;
|
ret.autoVol = av;
|
||||||
|
|
||||||
|
|
@ -181,55 +192,56 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
return msg == CTRL_SET_RESOLUTION || msg == CTRL_LASER_DOWN || msg == CTRL_LASER_MOVE;
|
return msg == CTRL_SET_RESOLUTION || msg == CTRL_LASER_DOWN || msg == CTRL_LASER_MOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static SMessageScreenCtrl decode(FriendlyByteBuf buf) {
|
||||||
public void fromBytes(ByteBuf buf) {
|
SMessageScreenCtrl message = new SMessageScreenCtrl();
|
||||||
ctrl = buf.readByte();
|
message.ctrl = buf.readByte();
|
||||||
dim = buf.readInt();
|
message.dim = buf.readResourceLocation();
|
||||||
pos = new Vector3i(buf);
|
message.pos = new Vector3i(buf);
|
||||||
side = BlockSide.fromInt(buf.readByte());
|
message.side = BlockSide.fromInt(buf.readByte());
|
||||||
|
|
||||||
if(ctrl == CTRL_SET_URL)
|
if(message.ctrl == CTRL_SET_URL)
|
||||||
url = ByteBufUtils.readUTF8String(buf);
|
message.url = buf.readUtf();
|
||||||
else if(ctrl == CTRL_ADD_FRIEND || ctrl == CTRL_REMOVE_FRIEND)
|
else if(message.ctrl == CTRL_ADD_FRIEND || message.ctrl == CTRL_REMOVE_FRIEND)
|
||||||
friend = new NameUUIDPair(buf);
|
message.friend = new NameUUIDPair(buf);
|
||||||
else if(ctrl == CTRL_SET_RIGHTS) {
|
else if(message.ctrl == CTRL_SET_RIGHTS) {
|
||||||
friendRights = buf.readByte();
|
message.friendRights = buf.readByte();
|
||||||
otherRights = buf.readByte();
|
message.otherRights = buf.readByte();
|
||||||
} else if(isVec2Ctrl(ctrl))
|
} else if(isVec2Ctrl(message.ctrl))
|
||||||
vec2i = new Vector2i(buf);
|
message.vec2i = new Vector2i(buf);
|
||||||
else if(ctrl == CTRL_TYPE) {
|
else if(message.ctrl == CTRL_TYPE) {
|
||||||
text = ByteBufUtils.readUTF8String(buf);
|
message.text = buf.readUtf();
|
||||||
|
|
||||||
int sx = buf.readInt();
|
int sx = buf.readInt();
|
||||||
int sy = buf.readInt();
|
int sy = buf.readInt();
|
||||||
int sz = buf.readInt();
|
int sz = buf.readInt();
|
||||||
soundPos = new BlockPos(sx, sy, sz);
|
message.soundPos = new BlockPos(sx, sy, sz);
|
||||||
} else if(ctrl == CTRL_REMOVE_UPGRADE)
|
} else if(message.ctrl == CTRL_REMOVE_UPGRADE)
|
||||||
toRemove = ByteBufUtils.readItemStack(buf);
|
message.toRemove = buf.readItem();
|
||||||
else if(ctrl == CTRL_JS_REQUEST) {
|
else if(message.ctrl == CTRL_JS_REQUEST) {
|
||||||
jsReqID = buf.readInt();
|
message.jsReqID = buf.readInt();
|
||||||
jsReqType = JSServerRequest.fromID(buf.readByte());
|
message.jsReqType = JSServerRequest.fromID(buf.readByte());
|
||||||
|
|
||||||
if(jsReqType != null)
|
if(message.jsReqType != null)
|
||||||
jsReqData = jsReqType.deserialize(buf);
|
message.jsReqData = message.jsReqType.deserialize(buf);
|
||||||
} else if(ctrl == CTRL_SET_ROTATION)
|
} else if(message.ctrl == CTRL_SET_ROTATION)
|
||||||
rotation = Rotation.values()[buf.readByte() & 3];
|
message.rotation = Rotation.values()[buf.readByte() & 3];
|
||||||
else if(ctrl == CTRL_SET_URL_REMOTE) {
|
else if(message.ctrl == CTRL_SET_URL_REMOTE) {
|
||||||
url = ByteBufUtils.readUTF8String(buf);
|
message.url = buf.readUtf();
|
||||||
remoteLoc = new Vector3i(buf);
|
message.remoteLoc = new Vector3i(buf);
|
||||||
} else if(ctrl == CTRL_SET_AUTO_VOL)
|
} else if(message.ctrl == CTRL_SET_AUTO_VOL)
|
||||||
autoVol = buf.readBoolean();
|
message.autoVol = buf.readBoolean();
|
||||||
|
|
||||||
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public void encode(FriendlyByteBuf buf) {
|
||||||
public void toBytes(ByteBuf buf) {
|
|
||||||
buf.writeByte(ctrl);
|
buf.writeByte(ctrl);
|
||||||
buf.writeInt(dim);
|
buf.writeResourceLocation(dim);
|
||||||
pos.writeTo(buf);
|
pos.writeTo(buf);
|
||||||
buf.writeByte(side.ordinal());
|
buf.writeByte(side.ordinal());
|
||||||
|
|
||||||
if(ctrl == CTRL_SET_URL)
|
if(ctrl == CTRL_SET_URL)
|
||||||
ByteBufUtils.writeUTF8String(buf, url);
|
buf.writeUtf(url);
|
||||||
else if(ctrl == CTRL_ADD_FRIEND || ctrl == CTRL_REMOVE_FRIEND)
|
else if(ctrl == CTRL_ADD_FRIEND || ctrl == CTRL_REMOVE_FRIEND)
|
||||||
friend.writeTo(buf);
|
friend.writeTo(buf);
|
||||||
else if(ctrl == CTRL_SET_RIGHTS) {
|
else if(ctrl == CTRL_SET_RIGHTS) {
|
||||||
|
|
@ -238,12 +250,12 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
} else if(isVec2Ctrl(ctrl))
|
} else if(isVec2Ctrl(ctrl))
|
||||||
vec2i.writeTo(buf);
|
vec2i.writeTo(buf);
|
||||||
else if(ctrl == CTRL_TYPE) {
|
else if(ctrl == CTRL_TYPE) {
|
||||||
ByteBufUtils.writeUTF8String(buf, text);
|
buf.writeUtf(text);
|
||||||
buf.writeInt(soundPos.getX());
|
buf.writeInt(soundPos.getX());
|
||||||
buf.writeInt(soundPos.getY());
|
buf.writeInt(soundPos.getY());
|
||||||
buf.writeInt(soundPos.getZ());
|
buf.writeInt(soundPos.getZ());
|
||||||
} else if(ctrl == CTRL_REMOVE_UPGRADE)
|
} else if(ctrl == CTRL_REMOVE_UPGRADE)
|
||||||
ByteBufUtils.writeItemStack(buf, toRemove);
|
buf.writeItem(toRemove);
|
||||||
else if(ctrl == CTRL_JS_REQUEST) {
|
else if(ctrl == CTRL_JS_REQUEST) {
|
||||||
buf.writeInt(jsReqID);
|
buf.writeInt(jsReqID);
|
||||||
buf.writeByte(jsReqType.ordinal());
|
buf.writeByte(jsReqType.ordinal());
|
||||||
|
|
@ -253,7 +265,7 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
} else if(ctrl == CTRL_SET_ROTATION)
|
} else if(ctrl == CTRL_SET_ROTATION)
|
||||||
buf.writeByte(rotation.ordinal());
|
buf.writeByte(rotation.ordinal());
|
||||||
else if(ctrl == CTRL_SET_URL_REMOTE) {
|
else if(ctrl == CTRL_SET_URL_REMOTE) {
|
||||||
ByteBufUtils.writeUTF8String(buf, url);
|
buf.writeUtf(url);
|
||||||
remoteLoc.writeTo(buf);
|
remoteLoc.writeTo(buf);
|
||||||
} else if(ctrl == CTRL_SET_AUTO_VOL)
|
} else if(ctrl == CTRL_SET_AUTO_VOL)
|
||||||
buf.writeBoolean(autoVol);
|
buf.writeBoolean(autoVol);
|
||||||
|
|
@ -280,26 +292,26 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runUnsafe() throws MissingPermissionException {
|
private void runUnsafe() throws MissingPermissionException {
|
||||||
World world = player.world;
|
Level world = player.level;
|
||||||
BlockPos bp = pos.toBlock();
|
BlockPos bp = pos.toBlock();
|
||||||
|
|
||||||
if(world.provider.getDimension() != dim)
|
if(!world.dimension().location().equals(dim))
|
||||||
return; //Out of range (dimension mismatch)
|
return; //Out of range (dimension mismatch)
|
||||||
|
|
||||||
if(ctrl == CTRL_SET_URL_REMOTE) {
|
if(ctrl == CTRL_SET_URL_REMOTE) {
|
||||||
double reachDist = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue();
|
double reachDist = player.getAttributeValue(ForgeMod.REACH_DISTANCE.get());
|
||||||
BlockPos blockPos = remoteLoc.toBlock();
|
BlockPos blockPos = remoteLoc.toBlock();
|
||||||
|
|
||||||
if(player.getDistanceSq(blockPos) > reachDist * reachDist)
|
if(player.distanceToSqr(blockPos.getX(), blockPos.getY(), blockPos.getZ()) > reachDist * reachDist)
|
||||||
return; //Out of range (player reach distance)
|
return; //Out of range (player reach distance)
|
||||||
|
|
||||||
IBlockState bs = world.getBlockState(blockPos);
|
BlockState bs = world.getBlockState(blockPos);
|
||||||
if(bs.getBlock() != WebDisplays.INSTANCE.blockPeripheral || bs.getValue(BlockPeripheral.type) != DefaultPeripheral.REMOTE_CONTROLLER)
|
if(bs.getBlock() != WebDisplays.INSTANCE.blockPeripheral || bs.getValue(BlockPeripheral.type) != DefaultPeripheral.REMOTE_CONTROLLER)
|
||||||
return; //I call it hax...
|
return; //I call it hax...
|
||||||
} else if(player.getDistanceSq(bp) > 128.0 * 128.0)
|
} else if(player.shouldRenderAtSqrDistance(player.distanceToSqr(bp.getX(), bp.getY(), bp.getZ())))
|
||||||
return; //Out of range (range problem)
|
return; //Out of range (range problem)
|
||||||
|
|
||||||
TileEntity te = world.getTileEntity(bp);
|
BlockEntity te = world.getBlockEntity(bp);
|
||||||
if(te == null || !(te instanceof TileEntityScreen)) {
|
if(te == null || !(te instanceof TileEntityScreen)) {
|
||||||
Log.error("TileEntity at %s is not a screen; can't control it!", pos.toString());
|
Log.error("TileEntity at %s is not a screen; can't control it!", pos.toString());
|
||||||
return;
|
return;
|
||||||
|
|
@ -358,15 +370,9 @@ public class SMessageScreenCtrl implements IMessage, Runnable {
|
||||||
Log.warning("Caught SMessageScreenCtrl with invalid control ID %d from player %s (UUID %s)", ctrl, player.getName(), player.getGameProfile().getId().toString());
|
Log.warning("Caught SMessageScreenCtrl with invalid control ID %d from player %s (UUID %s)", ctrl, player.getName(), player.getGameProfile().getId().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Handler implements IMessageHandler<SMessageScreenCtrl, IMessage> {
|
public void handle(Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
player = contextSupplier.get().getSender();
|
||||||
@Override
|
contextSupplier.get().enqueueWork(this);
|
||||||
public IMessage onMessage(SMessageScreenCtrl message, MessageContext ctx) {
|
|
||||||
message.player = ctx.getServerHandler().player;
|
|
||||||
((WorldServer) message.player.world).addScheduledTask(message);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user