diff --git a/build.gradle b/build.gradle index aec784b..81c4a12 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,9 @@ plugins { allprojects { repositories { mavenCentral() - maven { url = "https://maven.neoforged.net/releases" } + maven { url = "https://libraries.minecraft.net/" } + maven { url = "https://neoforged.forgecdn.net/releases" } + maven { url = "https://neoforged.forgecdn.net/mojang-meta" } maven { url = "https://maven.minecraftforge.net/" } maven { url = "https://maven.parchmentmc.org" } maven { url = "https://maven.izzel.io/releases/" } @@ -26,6 +28,10 @@ allprojects { maven { url "https://cursemaven.com" } + maven { + name = 'papermc' + url = 'https://repo.papermc.io/repository/maven-public/' + } } processResources{ duplicatesStrategy = DuplicatesStrategy.EXCLUDE diff --git a/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/ClientPingHandler.java b/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/ClientPingHandler.java index 9a04c26..5671ac4 100644 --- a/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/ClientPingHandler.java +++ b/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/ClientPingHandler.java @@ -3,6 +3,7 @@ package com.leisuretimedock.crossmod.client; import com.leisuretimedock.crossmod.network.PingRequestManager; import net.minecraft.client.Minecraft; import net.minecraft.world.entity.player.Player; +import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -102,7 +103,7 @@ public class ClientPingHandler { } // 合并Ping数据和统计数据的显示方法 - public static List getCombinedDebugText() { + public static @NotNull List getCombinedDebugText() { List lines = new ArrayList<>(); // 添加Ping数据 diff --git a/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/KeyBindingHandler.java b/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/KeyBindingHandler.java index ee02e84..8b424b1 100644 --- a/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/KeyBindingHandler.java +++ b/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/KeyBindingHandler.java @@ -2,8 +2,11 @@ package com.leisuretimedock.crossmod.client; import com.leisuretimedock.crossmod.CrossTeleportMod; import com.leisuretimedock.crossmod.client.gui.CrossServerGui; +import com.leisuretimedock.crossmod.client.gui.GenericIceMessageScreen; +import net.minecraft.ChatFormatting; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.TranslatableComponent; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.ClientRegistry; import net.minecraftforge.event.TickEvent; diff --git a/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/gui/GenericIceMessageScreen.java b/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/gui/GenericIceMessageScreen.java new file mode 100644 index 0000000..6061254 --- /dev/null +++ b/forge-mod/src/main/java/com/leisuretimedock/crossmod/client/gui/GenericIceMessageScreen.java @@ -0,0 +1,57 @@ +package com.leisuretimedock.crossmod.client.gui; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import net.minecraft.client.gui.screens.GenericDirtMessageScreen; +import net.minecraft.client.gui.screens.inventory.InventoryScreen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.client.event.ScreenEvent; +import net.minecraftforge.common.MinecraftForge; +import org.jetbrains.annotations.NotNull; + +public class GenericIceMessageScreen extends GenericDirtMessageScreen { + public static final ResourceLocation ICE = new ResourceLocation("textures/block/ice.png"); + //todo: tip ? + private int tick = 0; + public GenericIceMessageScreen(Component title) { + super(title); + } + + @Override + public void tick() { + super.tick(); + tick++; + } + + @Override + public void render(@NotNull PoseStack poseStack, int mouseX, int mouseY, float partialTick) { + super.render(poseStack, mouseX, mouseY, partialTick); + if (minecraft != null && minecraft.player != null){ + InventoryScreen.renderEntityInInventory(width / 2, height / 2, 30, (float) width / 2 - mouseX, (float) height / 2 - mouseY, minecraft.player); + } + } + + @Override + public void renderDirtBackground(int vOffset) { + renderIceBackground(vOffset,200, 200, 200, 255); + } + + public void renderIceBackground(int vOffset, int r, int g, int b, int a) { + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferbuilder = tesselator.getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.setShaderTexture(0, ICE); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + float f = 32.0F; + bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + bufferbuilder.vertex(0.0, this.height, 0.0).uv(0.0F, (float)this.height / f + (float)vOffset).color(r, g, b, a).endVertex(); + bufferbuilder.vertex(this.width, this.height, 0.0).uv((float)this.width / f, (float)this.height / f + (float)vOffset).color(r, g, b, a).endVertex(); + bufferbuilder.vertex(this.width, 0.0, 0.0).uv((float)this.width / f, (float)vOffset).color(r, g, b, a).endVertex(); + bufferbuilder.vertex(0.0, 0.0, 0.0).uv(0.0F, (float)vOffset).color(r, g, b, a).endVertex(); + tesselator.end(); + MinecraftForge.EVENT_BUS.post(new ScreenEvent.BackgroundDrawnEvent(this, new PoseStack())); + } + +} diff --git a/forge-mod/src/main/java/com/leisuretimedock/crossmod/reset/ResetHelper.java b/forge-mod/src/main/java/com/leisuretimedock/crossmod/reset/ResetHelper.java index 51fee79..d643c68 100644 --- a/forge-mod/src/main/java/com/leisuretimedock/crossmod/reset/ResetHelper.java +++ b/forge-mod/src/main/java/com/leisuretimedock/crossmod/reset/ResetHelper.java @@ -1,8 +1,8 @@ package com.leisuretimedock.crossmod.reset; +import com.leisuretimedock.crossmod.client.gui.GenericIceMessageScreen; import lombok.extern.slf4j.Slf4j; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.GenericDirtMessageScreen; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.network.chat.TranslatableComponent; import net.minecraftforge.api.distmarker.Dist; @@ -27,7 +27,7 @@ public class ResetHelper { GameData.revertToFrozen(); } - minecraft.clearLevel(new GenericDirtMessageScreen(new TranslatableComponent("ltd.mod.client.negotiating").withStyle(BOLD))); + minecraft.clearLevel(new GenericIceMessageScreen(new TranslatableComponent("ltd.mod.client.negotiating").withStyle(BOLD))); minecraft.setCurrentServer(serverData); }); log.debug("Waiting for Clear to complete"); diff --git a/settings.gradle b/settings.gradle index 09fcc8a..c08a85b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,15 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + maven { url = 'https://maven.neoforged.net/releases' } + maven { url = 'https://maven.parchmentmc.org' } // Add this line + maven { + name = 'papermc' + url = 'https://repo.papermc.io/repository/maven-public/' + } + } +} plugins { id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' } diff --git a/velocity-plugin/build.gradle b/velocity-plugin/build.gradle index 984c717..7eeb6a3 100644 --- a/velocity-plugin/build.gradle +++ b/velocity-plugin/build.gradle @@ -8,7 +8,10 @@ group = plugin_group version = plugin_version repositories { mavenCentral() - maven { url 'https://repo.velocitypowered.com/releases/' } + maven { + name = 'papermc' + url = 'https://repo.papermc.io/repository/maven-public/' + } maven { url 'https://repo.lucko.me/' } // LuckPerms maven { url "https://repo.william278.net/releases" } // } @@ -19,9 +22,9 @@ base { dependencies { compileOnly 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.24' - compileOnly 'com.velocitypowered:velocity-api:3.2.0-SNAPSHOT' + compileOnly("com.velocitypowered:velocity-api:3.4.0") + annotationProcessor("com.velocitypowered:velocity-api:3.4.0") implementation("org.spongepowered:configurate-yaml:4.1.2") - annotationProcessor 'com.velocitypowered:velocity-api:3.2.0-SNAPSHOT' compileOnly 'net.luckperms:api:5.4' // LuckPerms API implementation "net.william278:velocityscoreboardapi:1.1.3" } diff --git a/velocity-plugin/src/main/java/com/leisuretimedock/crossplugin/manager/PingManager.java b/velocity-plugin/src/main/java/com/leisuretimedock/crossplugin/manager/PingManager.java index d74516d..6e6b19e 100644 --- a/velocity-plugin/src/main/java/com/leisuretimedock/crossplugin/manager/PingManager.java +++ b/velocity-plugin/src/main/java/com/leisuretimedock/crossplugin/manager/PingManager.java @@ -12,7 +12,7 @@ import static com.leisuretimedock.crossplugin.CrossPlugin.CROSS_TELEPORT_MOD; @Slf4j public class PingManager { private final ProxyServer server; - private final Map serverPingResults = new HashMap<>(); + private final Map serverFallCounter = new HashMap<>(); private final ConfigManager configManager; public PingManager(ProxyServer server, ConfigManager configManager) { @@ -50,10 +50,14 @@ public class PingManager { long ping = endTime - startTime; String name = serverInfo.getServerInfo().getName(); if (throwable == null) { - serverPingResults.put(name, ping); - if(configManager.isEnablePingLog()) log.debug(CROSS_TELEPORT_MOD, "Ping to server {}: {}ms", name, ping); + if(configManager.isEnablePingLog()) log.debug(CROSS_TELEPORT_MOD, "Ping to server {}: {} ms", name, ping); } else { - if(configManager.isEnablePingLog()) log.warn(CROSS_TELEPORT_MOD, "Failed to ping server {}", name, throwable); + if(configManager.isEnablePingLog()) { + Integer put = serverFallCounter.put(name, serverFallCounter.getOrDefault(name, 0) + 1); + if (put != null && put == 1) { + log.warn(CROSS_TELEPORT_MOD, "Failed to ping server {}", name, throwable); + } + } } }); }