fabric-1.19: do the actual porting work
This commit is contained in:
parent
556051dc9a
commit
f02a73bb0d
7 changed files with 34 additions and 21 deletions
|
|
@ -268,7 +268,7 @@ public class DynmapPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Consider whether cheats are enabled for integrated server
|
// TODO: Consider whether cheats are enabled for integrated server
|
||||||
return server.isSingleplayer() && player.equalsIgnoreCase(server.getSinglePlayerName());
|
return server.isSingleplayer() && server.isHost(server.getPlayerManager().getPlayer(player).getGameProfile());
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasPerm(PlayerEntity psender, String permission) {
|
boolean hasPerm(PlayerEntity psender, String permission) {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ public class FabricCommandSender implements DynmapCommandSender {
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String msg) {
|
public void sendMessage(String msg) {
|
||||||
if (sender != null) {
|
if (sender != null) {
|
||||||
Text ichatcomponent = new LiteralTextContent(msg);
|
Text ichatcomponent = Text.literal(msg);
|
||||||
sender.sendFeedback(ichatcomponent, false);
|
sender.sendFeedback(ichatcomponent, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,8 @@ public class FabricMapChunkCache extends GenericMapChunkCache {
|
||||||
ThreadedAnvilChunkStorage acl = cps.threadedAnvilChunkStorage;
|
ThreadedAnvilChunkStorage acl = cps.threadedAnvilChunkStorage;
|
||||||
|
|
||||||
ChunkPos coord = new ChunkPos(x, z);
|
ChunkPos coord = new ChunkPos(x, z);
|
||||||
return acl.getNbt(coord);
|
// Async chunk reading is synchronized here. Perhaps we can do async and improve performance?
|
||||||
|
return acl.getNbt(coord).join().orElse(null);
|
||||||
} catch (Exception exc) {
|
} catch (Exception exc) {
|
||||||
Log.severe(String.format("Error reading chunk: %s,%d,%d", dw.getName(), x, z), exc);
|
Log.severe(String.format("Error reading chunk: %s,%d,%d", dw.getName(), x, z), exc);
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -188,8 +188,8 @@ public class FabricPlayer extends FabricCommandSender implements DynmapPlayer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String msg) {
|
public void sendMessage(String msg) {
|
||||||
Text ichatcomponent = new LiteralTextContent(msg);
|
Text ichatcomponent = Text.literal(msg);
|
||||||
player.sendSystemMessage(ichatcomponent, Util.NIL_UUID);
|
player.sendMessage(ichatcomponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -239,12 +239,12 @@ public class FabricPlayer extends FabricCommandSender implements DynmapPlayer {
|
||||||
TitleFadeS2CPacket times = new TitleFadeS2CPacket(fadeInTicks, stayTicks, fadeOutTicks);
|
TitleFadeS2CPacket times = new TitleFadeS2CPacket(fadeInTicks, stayTicks, fadeOutTicks);
|
||||||
player.networkHandler.sendPacket(times);
|
player.networkHandler.sendPacket(times);
|
||||||
if (title != null) {
|
if (title != null) {
|
||||||
TitleS2CPacket titlepkt = new TitleS2CPacket(new LiteralTextContent(title));
|
TitleS2CPacket titlepkt = new TitleS2CPacket(Text.literal(title));
|
||||||
player.networkHandler.sendPacket(titlepkt);
|
player.networkHandler.sendPacket(titlepkt);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subtitle != null) {
|
if (subtitle != null) {
|
||||||
SubtitleS2CPacket subtitlepkt = new SubtitleS2CPacket(new LiteralTextContent(subtitle));
|
SubtitleS2CPacket subtitlepkt = new SubtitleS2CPacket(Text.literal(subtitle));
|
||||||
player.networkHandler.sendPacket(subtitlepkt);
|
player.networkHandler.sendPacket(subtitlepkt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,7 @@ public class FabricServer extends DynmapServerInterface {
|
||||||
case SIGN_CHANGE:
|
case SIGN_CHANGE:
|
||||||
BlockEvents.SIGN_CHANGE_EVENT.register((world, pos, lines, material, player) -> {
|
BlockEvents.SIGN_CHANGE_EVENT.register((world, pos, lines, material, player) -> {
|
||||||
plugin.core.processSignChange("fabric", FabricWorld.getWorldName(plugin, world),
|
plugin.core.processSignChange("fabric", FabricWorld.getWorldName(plugin, world),
|
||||||
pos.getX(), pos.getY(), pos.getZ(), lines, player.getName().getContent());
|
pos.getX(), pos.getY(), pos.getZ(), lines, player.getName().getString());
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -292,8 +292,8 @@ public class FabricServer extends DynmapServerInterface {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void broadcastMessage(String msg) {
|
public void broadcastMessage(String msg) {
|
||||||
Text component = new LiteralTextContent(msg);
|
Text component = Text.literal(msg);
|
||||||
server.getPlayerManager().broadcast(component, MessageType.SYSTEM, Util.NIL_UUID);
|
server.getPlayerManager().broadcast(component, MessageType.SYSTEM);
|
||||||
Log.info(stripChatColor(msg));
|
Log.info(stripChatColor(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package org.dynmap.fabric_1_19;
|
package org.dynmap.fabric_1_19;
|
||||||
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import net.minecraft.world.Heightmap;
|
import net.minecraft.world.Heightmap;
|
||||||
import net.minecraft.world.LightType;
|
import net.minecraft.world.LightType;
|
||||||
|
|
@ -49,7 +50,7 @@ public class FabricWorld extends DynmapWorld {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateWorld(World w) {
|
public void updateWorld(World w) {
|
||||||
this.updateWorldHeights(w.getHeight(), w.getDimension().getMinimumY(), w.getSeaLevel());
|
this.updateWorldHeights(w.getHeight(), w.getBottomY(), w.getSeaLevel());
|
||||||
}
|
}
|
||||||
|
|
||||||
public FabricWorld(DynmapPlugin plugin, World w) {
|
public FabricWorld(DynmapPlugin plugin, World w) {
|
||||||
|
|
@ -58,7 +59,7 @@ public class FabricWorld extends DynmapWorld {
|
||||||
w.getRegistryKey() == World.NETHER,
|
w.getRegistryKey() == World.NETHER,
|
||||||
w.getRegistryKey() == World.END,
|
w.getRegistryKey() == World.END,
|
||||||
w.getRegistryKey().getValue().getPath(),
|
w.getRegistryKey().getValue().getPath(),
|
||||||
w.getDimension().getMinimumY());
|
w.getBottomY());
|
||||||
setWorldLoaded(w);
|
setWorldLoaded(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -148,8 +149,14 @@ public class FabricWorld extends DynmapWorld {
|
||||||
world = w;
|
world = w;
|
||||||
this.sealevel = w.getSeaLevel(); // Read actual current sealevel from world
|
this.sealevel = w.getSeaLevel(); // Read actual current sealevel from world
|
||||||
// Update lighting table
|
// Update lighting table
|
||||||
for (int i = 0; i < 16; i++) {
|
for (int lightLevel = 0; lightLevel < 16; lightLevel++) {
|
||||||
this.setBrightnessTableEntry(i, w.getDimension().getBrightness(i));
|
// Algorithm based on LightmapTextureManager.getBrightness()
|
||||||
|
// We can't call that method because it's client-only.
|
||||||
|
// This means the code below can stop being correct if Mojang ever
|
||||||
|
// updates the curve; in that case we should reflect the changes.
|
||||||
|
float value = (float) lightLevel / 15.0f;
|
||||||
|
float brightness = value / (4.0f - 3.0f * value);
|
||||||
|
this.setBrightnessTableEntry(lightLevel, MathHelper.lerp(w.getDimension().ambientLight(), brightness, 1.0F));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,16 +3,21 @@ package org.dynmap.fabric_1_19.mixin;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.entity.BlockEntity;
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
import net.minecraft.block.entity.SignBlockEntity;
|
import net.minecraft.block.entity.SignBlockEntity;
|
||||||
|
import net.minecraft.network.MessageType;
|
||||||
|
import net.minecraft.network.encryption.SignedChatMessage;
|
||||||
import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket;
|
import net.minecraft.network.packet.c2s.play.UpdateSignC2SPacket;
|
||||||
|
import net.minecraft.server.filter.Message;
|
||||||
import net.minecraft.server.filter.TextStream;
|
import net.minecraft.server.filter.TextStream;
|
||||||
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
import net.minecraft.server.network.ServerPlayNetworkHandler;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.server.world.ServerWorld;
|
import net.minecraft.server.world.ServerWorld;
|
||||||
import net.minecraft.text.LiteralTextContent;
|
import net.minecraft.text.LiteralTextContent;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.util.registry.RegistryKey;
|
||||||
import org.dynmap.fabric_1_19.event.BlockEvents;
|
import org.dynmap.fabric_1_19.event.BlockEvents;
|
||||||
import org.dynmap.fabric_1_19.event.ServerChatEvents;
|
import org.dynmap.fabric_1_19.event.ServerChatEvents;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
|
@ -28,15 +33,15 @@ public abstract class ServerPlayNetworkHandlerMixin {
|
||||||
public ServerPlayerEntity player;
|
public ServerPlayerEntity player;
|
||||||
|
|
||||||
@Inject(
|
@Inject(
|
||||||
method = "handleMessage",
|
method = "method_44155",
|
||||||
at = @At(
|
at = @At(
|
||||||
value = "INVOKE",
|
value = "INVOKE",
|
||||||
target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/text/Text;Ljava/util/function/Function;Lnet/minecraft/network/MessageType;Ljava/util/UUID;)V",
|
target = "Lnet/minecraft/server/PlayerManager;broadcast(Lnet/minecraft/server/filter/Message;Lnet/minecraft/server/network/ServerPlayerEntity;Lnet/minecraft/util/registry/RegistryKey;)V",
|
||||||
shift = At.Shift.BEFORE
|
shift = At.Shift.BEFORE
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
public void onGameMessage(TextStream.Message message, CallbackInfo info) {
|
public void onGameMessage(Message<SignedChatMessage> message, CallbackInfo ci) {
|
||||||
ServerChatEvents.EVENT.invoker().onChatMessage(player, message.getRaw());
|
ServerChatEvents.EVENT.invoker().onChatMessage(player, message.raw().getContent().getString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(
|
@Inject(
|
||||||
|
|
@ -48,19 +53,19 @@ public abstract class ServerPlayNetworkHandlerMixin {
|
||||||
),
|
),
|
||||||
locals = LocalCapture.CAPTURE_FAILHARD
|
locals = LocalCapture.CAPTURE_FAILHARD
|
||||||
)
|
)
|
||||||
public void onSignUpdate(UpdateSignC2SPacket packet, List<TextStream.Message> signText, CallbackInfo info,
|
public void onSignUpdate(UpdateSignC2SPacket packet, List<Message<String>> signText, CallbackInfo info,
|
||||||
ServerWorld serverWorld, BlockPos blockPos, BlockState blockState, BlockEntity blockEntity, SignBlockEntity signBlockEntity)
|
ServerWorld serverWorld, BlockPos blockPos, BlockState blockState, BlockEntity blockEntity, SignBlockEntity signBlockEntity)
|
||||||
{
|
{
|
||||||
// Pull the raw text from the input.
|
// Pull the raw text from the input.
|
||||||
String[] rawTexts = new String[4];
|
String[] rawTexts = new String[4];
|
||||||
for (int i=0; i<signText.size(); i++)
|
for (int i=0; i<signText.size(); i++)
|
||||||
rawTexts[i] = signText.get(i).getRaw();
|
rawTexts[i] = signText.get(i).raw();
|
||||||
|
|
||||||
// Fire the event.
|
// Fire the event.
|
||||||
BlockEvents.SIGN_CHANGE_EVENT.invoker().onSignChange(serverWorld, blockPos, rawTexts, blockState.getMaterial(), player);
|
BlockEvents.SIGN_CHANGE_EVENT.invoker().onSignChange(serverWorld, blockPos, rawTexts, blockState.getMaterial(), player);
|
||||||
|
|
||||||
// Put the (possibly updated) texts in the sign. Ignore filtering (is this OK?).
|
// Put the (possibly updated) texts in the sign. Ignore filtering (is this OK?).
|
||||||
for (int i=0; i<signText.size(); i++)
|
for (int i=0; i<signText.size(); i++)
|
||||||
signBlockEntity.setTextOnRow(i, new LiteralTextContent(rawTexts[i]));
|
signBlockEntity.setTextOnRow(i, Text.literal(rawTexts[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue