mirror of
https://github.com/FabricMC/fabric.git
synced 2025-03-31 09:10:00 -04:00
tweak commands/networking hooks
This commit is contained in:
parent
524f8cfb7f
commit
7952ae283c
5 changed files with 43 additions and 64 deletions
src/main/java/net/fabricmc/fabric
commands
mixin/networking
networking
|
@ -22,7 +22,6 @@ import net.minecraft.command.ServerCommandSource;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class CommandRegistry {
|
||||
|
@ -31,7 +30,7 @@ public class CommandRegistry {
|
|||
private final List<Consumer<CommandDispatcher<ServerCommandSource>>> serverCommands;
|
||||
private final List<Consumer<CommandDispatcher<ServerCommandSource>>> dedicatedServerCommands;
|
||||
|
||||
public CommandRegistry() {
|
||||
protected CommandRegistry() {
|
||||
this.serverCommands = new ArrayList<>();
|
||||
this.dedicatedServerCommands = new ArrayList<>();
|
||||
}
|
||||
|
|
|
@ -20,14 +20,15 @@ import net.fabricmc.api.Side;
|
|||
import net.fabricmc.fabric.networking.CustomPayloadHandlerRegistry;
|
||||
import net.fabricmc.fabric.networking.PacketContext;
|
||||
import net.fabricmc.fabric.networking.SPacketCustomPayloadAccessor;
|
||||
import net.fabricmc.fabric.networking.impl.PacketContextImpl;
|
||||
import net.minecraft.client.MinecraftGame;
|
||||
import net.minecraft.client.network.handler.ClientGameNetworkHandler;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerServer;
|
||||
import net.minecraft.network.handler.ServerPlayNetworkHandler;
|
||||
import net.minecraft.network.packet.client.CPacketCustomPayload;
|
||||
import net.minecraft.network.packet.server.SPacketCustomPayload;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.ThreadTaskQueue;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
@ -35,13 +36,31 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ClientGameNetworkHandler.class)
|
||||
public class MixinClientPlayNetworkHandler {
|
||||
public class MixinClientPlayNetworkHandler implements PacketContext {
|
||||
@Shadow
|
||||
private MinecraftGame game;
|
||||
|
||||
@Inject(method = "onCustomPayload", at = @At("HEAD"), cancellable = true)
|
||||
public void onCustomPayload(CPacketCustomPayload packet, CallbackInfo info) {
|
||||
MinecraftGame game = MinecraftGame.getInstance();
|
||||
|
||||
if (CustomPayloadHandlerRegistry.CLIENT.accept(packet.getChannel(), new PacketContextImpl(Side.CLIENT, game.player, game), packet.getData())) {
|
||||
if (CustomPayloadHandlerRegistry.CLIENT.accept(packet.getChannel(), this, packet.getData())) {
|
||||
info.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Side getNetworkSide() {
|
||||
return Side.CLIENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityPlayer getPlayer() {
|
||||
return game.player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadTaskQueue getTaskQueue() {
|
||||
return game;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,11 +20,12 @@ import net.fabricmc.api.Side;
|
|||
import net.fabricmc.fabric.networking.CustomPayloadHandlerRegistry;
|
||||
import net.fabricmc.fabric.networking.PacketContext;
|
||||
import net.fabricmc.fabric.networking.SPacketCustomPayloadAccessor;
|
||||
import net.fabricmc.fabric.networking.impl.PacketContextImpl;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerServer;
|
||||
import net.minecraft.network.handler.ServerPlayNetworkHandler;
|
||||
import net.minecraft.network.packet.server.SPacketCustomPayload;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.ThreadTaskQueue;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
|
@ -32,24 +33,33 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ServerPlayNetworkHandler.class)
|
||||
public class MixinServerPlayNetworkHandler {
|
||||
public class MixinServerPlayNetworkHandler implements PacketContext {
|
||||
@Shadow
|
||||
private MinecraftServer server;
|
||||
@Shadow
|
||||
private EntityPlayerServer player;
|
||||
|
||||
private PacketContext fabricPacketContext;
|
||||
|
||||
@Inject(method = "onCustomPayload", at = @At("HEAD"), cancellable = true)
|
||||
public void onCustomPayload(SPacketCustomPayload packet, CallbackInfo info) {
|
||||
if (fabricPacketContext == null || fabricPacketContext.getPlayer() != player) {
|
||||
fabricPacketContext = new PacketContextImpl(Side.SERVER, player, server);
|
||||
}
|
||||
|
||||
SPacketCustomPayloadAccessor accessor = ((SPacketCustomPayloadAccessor) packet);
|
||||
|
||||
if (CustomPayloadHandlerRegistry.SERVER.accept(accessor.getChannel(), fabricPacketContext, accessor.getData())) {
|
||||
if (CustomPayloadHandlerRegistry.SERVER.accept(accessor.getChannel(), this, accessor.getData())) {
|
||||
info.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Side getNetworkSide() {
|
||||
return Side.SERVER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityPlayer getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadTaskQueue getTaskQueue() {
|
||||
return server;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ import net.minecraft.util.ThreadTaskQueue;
|
|||
* the correct task queue to enqueue synchronization-requiring code on.
|
||||
*/
|
||||
public interface PacketContext {
|
||||
Side getSide();
|
||||
Side getNetworkSide();
|
||||
EntityPlayer getPlayer();
|
||||
ThreadTaskQueue getTaskQueue();
|
||||
}
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016, 2017, 2018 FabricMC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package net.fabricmc.fabric.networking.impl;
|
||||
|
||||
import net.fabricmc.api.Side;
|
||||
import net.fabricmc.fabric.networking.PacketContext;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.ThreadTaskQueue;
|
||||
|
||||
public class PacketContextImpl implements PacketContext {
|
||||
private final Side side;
|
||||
private final EntityPlayer player;
|
||||
private final ThreadTaskQueue taskQueue;
|
||||
|
||||
public PacketContextImpl(Side side, EntityPlayer player, ThreadTaskQueue taskQueue) {
|
||||
this.side = side;
|
||||
this.player = player;
|
||||
this.taskQueue = taskQueue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Side getSide() {
|
||||
return side;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityPlayer getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ThreadTaskQueue getTaskQueue() {
|
||||
return taskQueue;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue