Last active
November 27, 2021 04:37
-
-
Save Moulberry/b9c46c9aa3f2845d4c919c3f8a80fe94 to your computer and use it in GitHub Desktop.
Sign Input
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class PlayerInput { | |
private static final HashMap<UUID, Consumer<?>> callbackMap = new HashMap<>(); | |
private static final Set<Class<?>> ignoredClasses = Sets.newHashSet( | |
ClientAnimationPacket.class, | |
ClientPongPacket.class, | |
ClientPlayerPositionPacket.class, | |
ClientPlayerRotationPacket.class, | |
ClientPlayerPositionAndRotationPacket.class, | |
ClientKeepAlivePacket.class | |
); | |
public static void doSignInput(Player player, Consumer<String> consumer) { | |
doSignInput(player, "Enter Value", consumer); | |
} | |
public static void doSignInput(Player player, String prompt, Consumer<String> consumer) { | |
UUID uuid = player.getUuid(); | |
if(callbackMap.containsKey(uuid)) { | |
callbackMap.get(uuid).accept(null); | |
callbackMap.remove(uuid); | |
} | |
callbackMap.put(uuid, consumer); | |
final Point signPosition = new Vec(player.getPosition().blockX(), 0, player.getPosition().blockZ()); | |
BlockChangePacket packet = new BlockChangePacket(); | |
packet.blockPosition = signPosition; | |
packet.blockStateId = Block.OAK_SIGN.stateId(); | |
player.getPlayerConnection().sendPacket(packet); | |
NBTCompound nbt = new NBTCompound(); | |
nbt.setString("Text1", GsonComponentSerializer.gson().serialize(Component.empty())); | |
nbt.setString("Text2", GsonComponentSerializer.gson().serialize(Component.empty())); | |
nbt.setString("Text3", GsonComponentSerializer.gson().serialize(Component.text("^^^^^^^^^^^"))); | |
nbt.setString("Text4", GsonComponentSerializer.gson().serialize(Component.text(prompt))); | |
BlockEntityDataPacket packet2 = new BlockEntityDataPacket(); | |
packet2.blockPosition = signPosition; | |
packet2.action = 9; //Sign | |
packet2.nbtCompound = nbt; | |
player.getPlayerConnection().sendPacket(packet2); | |
OpenSignEditorPacket packet3 = new OpenSignEditorPacket(); | |
packet3.signPosition = signPosition; | |
player.getPlayerConnection().sendPacket(packet3); | |
String id = "RegionParamShortStr-"+player.getUuid(); | |
MinecraftServer.getGlobalEventHandler().removeChildren(id); | |
EventNode<PlayerEvent> node = EventNode.type(id, EventFilter.PLAYER, (playerevent, p) -> player == p).setPriority(999); | |
node.addListener(PlayerPacketEvent.class, (event) -> { | |
if(event.getPacket() instanceof ClientUpdateSignPacket) { | |
ClientUpdateSignPacket updateSign = (ClientUpdateSignPacket) event.getPacket(); | |
callbackMap.remove(uuid); | |
MinecraftServer.getGlobalEventHandler().removeChildren(id); | |
if(event.getPlayer().getInstance() != null) { | |
BlockChangePacket blockChangePacket = new BlockChangePacket(); | |
blockChangePacket.blockPosition = signPosition; | |
blockChangePacket.blockStateId = event.getPlayer().getInstance().getBlock(signPosition).stateId(); | |
player.getPlayerConnection().sendPacket(blockChangePacket); | |
} | |
consumer.accept(updateSign.line1 + updateSign.line2); | |
} else if(!ignoredClasses.contains(event.getPacket().getClass())) { | |
callbackMap.remove(uuid); | |
MinecraftServer.getGlobalEventHandler().removeChildren(id); | |
if(event.getPlayer().getInstance() != null) { | |
BlockChangePacket blockChangePacket = new BlockChangePacket(); | |
blockChangePacket.blockPosition = signPosition; | |
blockChangePacket.blockStateId = event.getPlayer().getInstance().getBlock(signPosition).stateId(); | |
player.getPlayerConnection().sendPacket(blockChangePacket); | |
} | |
consumer.accept(null); | |
} | |
}); | |
node.addListener(PlayerDisconnectEvent.class, (event) -> { | |
MinecraftServer.getGlobalEventHandler().removeChildren(id); | |
}); | |
MinecraftServer.getGlobalEventHandler().addChild(node); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment