Начинающий
- Статус
- Оффлайн
- Регистрация
- 27 Ноя 2021
- Сообщения
- 56
- Реакции
- 1
Привет всем пастерам вот вам подарок на недрочабрь.
Заходим в gradle.properties
добавляем:
затем заходим в build.gradle
добавляем в
затем создаем класс ViaVersionManager:
Можно через Mixin добавить в мультиплейер создаем Mixin
MultiplayerScreenMixin
Указываем @Mixin(MultiplayerScreen.class)
и делаем что хотим или дальше говнокодим
Всё дальше кайфуем от жизни!
Заходим в gradle.properties
добавляем:
Код:
viafabricplus_version=4.0.5-BACKPORT
затем заходим в build.gradle
добавляем в
Код:
repositories {
maven {
name = "ViaVersion"
url = uri("https://repo.viaversion.com/")
}
maven {
name = "modrinth"
url = uri("https://api.modrinth.com/maven")
}
maven {
name = "OpenCollab Snapshots"
url = uri("https://repo.opencollab.dev/maven-snapshots/")
}
maven {
name = "Lenni0451"
url = uri("https://maven.lenni0451.net/everything")
}
}
Код:
dependencies {
modApi("com.viaversion:viafabricplus-api:${project.property("viafabricplus_version")}")
modRuntimeOnly("com.viaversion:viafabricplus:${project.property("viafabricplus_version")}")
}
затем создаем класс ViaVersionManager:
ViaVersionManager:
import lombok.Getter;
import net.fabricmc.loader.api.FabricLoader;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class ViaVersionManager {
private static ViaVersionManager instance;
@Getter
private MinecraftVersion selectedVersion;
@Getter
private final List<MinecraftVersion> supportedVersions = new ArrayList<>();
@Getter
private final MinecraftVersion nativeVersion = new MinecraftVersion("1.21.4", 769, true);
private boolean viaFabricPlusLoaded = false;
private ViaVersionManager() {
checkViaFabricPlusLoaded();
initSupportedVersions();
selectedVersion = nativeVersion;
}
public static ViaVersionManager getInstance() {
if (instance == null) {
instance = new ViaVersionManager();
}
return instance;
}
private void checkViaFabricPlusLoaded() {
try {
viaFabricPlusLoaded = FabricLoader.getInstance().isModLoaded("viafabricplus");
if (viaFabricPlusLoaded) {
System.out.println("[FourAPI] ✓ ViaFabricPlus 4.0.5-BACKPORT detected!");
} else {
System.out.println("[FourAPI] ⚠ ViaFabricPlus not loaded - version switching disabled");
}
} catch (Exception e) {
viaFabricPlusLoaded = false;
System.err.println("[FourAPI] Error checking ViaFabricPlus: " + e.getMessage());
}
}
private void initSupportedVersions() {
supportedVersions.add(new MinecraftVersion("1.21.4", 769, true));
supportedVersions.add(new MinecraftVersion("1.21.3", 768, false));
supportedVersions.add(new MinecraftVersion("1.21.2", 768, false));
supportedVersions.add(new MinecraftVersion("1.21.1", 767, false));
supportedVersions.add(new MinecraftVersion("1.21", 767, false));
supportedVersions.add(new MinecraftVersion("1.20.6", 766, false));
supportedVersions.add(new MinecraftVersion("1.20.5", 766, false));
supportedVersions.add(new MinecraftVersion("1.20.4", 765, false));
supportedVersions.add(new MinecraftVersion("1.20.3", 765, false));
supportedVersions.add(new MinecraftVersion("1.20.2", 764, false));
supportedVersions.add(new MinecraftVersion("1.20.1", 763, false));
supportedVersions.add(new MinecraftVersion("1.20", 763, false));
supportedVersions.add(new MinecraftVersion("1.19.4", 762, false));
supportedVersions.add(new MinecraftVersion("1.19.3", 761, false));
supportedVersions.add(new MinecraftVersion("1.19.2", 760, false));
supportedVersions.add(new MinecraftVersion("1.19.1", 760, false));
supportedVersions.add(new MinecraftVersion("1.19", 759, false));
supportedVersions.add(new MinecraftVersion("1.18.2", 758, false));
supportedVersions.add(new MinecraftVersion("1.18.1", 757, false));
supportedVersions.add(new MinecraftVersion("1.18", 757, false));
supportedVersions.add(new MinecraftVersion("1.17.1", 756, false));
supportedVersions.add(new MinecraftVersion("1.17", 755, false));
supportedVersions.add(new MinecraftVersion("1.16.5", 754, false));
supportedVersions.add(new MinecraftVersion("1.16.4", 754, false));
supportedVersions.add(new MinecraftVersion("1.16.3", 753, false));
supportedVersions.add(new MinecraftVersion("1.16.2", 751, false));
supportedVersions.add(new MinecraftVersion("1.16.1", 736, false));
supportedVersions.add(new MinecraftVersion("1.16", 735, false));
supportedVersions.add(new MinecraftVersion("1.15.2", 578, false));
supportedVersions.add(new MinecraftVersion("1.15.1", 575, false));
supportedVersions.add(new MinecraftVersion("1.15", 573, false));
supportedVersions.add(new MinecraftVersion("1.14.4", 498, false));
supportedVersions.add(new MinecraftVersion("1.14.3", 490, false));
supportedVersions.add(new MinecraftVersion("1.14.2", 485, false));
supportedVersions.add(new MinecraftVersion("1.14.1", 480, false));
supportedVersions.add(new MinecraftVersion("1.14", 477, false));
supportedVersions.add(new MinecraftVersion("1.13.2", 404, false));
supportedVersions.add(new MinecraftVersion("1.13.1", 401, false));
supportedVersions.add(new MinecraftVersion("1.13", 393, false));
supportedVersions.add(new MinecraftVersion("1.12.2", 340, false));
supportedVersions.add(new MinecraftVersion("1.12.1", 338, false));
supportedVersions.add(new MinecraftVersion("1.12", 335, false));
supportedVersions.add(new MinecraftVersion("1.11.2", 316, false));
supportedVersions.add(new MinecraftVersion("1.11.1", 316, false));
supportedVersions.add(new MinecraftVersion("1.11", 315, false));
supportedVersions.add(new MinecraftVersion("1.10.2", 210, false));
supportedVersions.add(new MinecraftVersion("1.10.1", 210, false));
supportedVersions.add(new MinecraftVersion("1.10", 210, false));
supportedVersions.add(new MinecraftVersion("1.9.4", 110, false));
supportedVersions.add(new MinecraftVersion("1.9.3", 110, false));
supportedVersions.add(new MinecraftVersion("1.9.2", 109, false));
supportedVersions.add(new MinecraftVersion("1.9.1", 108, false));
supportedVersions.add(new MinecraftVersion("1.9", 107, false));
supportedVersions.add(new MinecraftVersion("1.8.9", 47, false));
supportedVersions.add(new MinecraftVersion("1.8", 47, false));
supportedVersions.add(new MinecraftVersion("1.7.10", 5, false));
supportedVersions.add(new MinecraftVersion("1.7.2", 4, false));
}
public void setVersion(MinecraftVersion version) {
if (version == null) return;
this.selectedVersion = version;
if (!viaFabricPlusLoaded) {
System.out.println("[FourAPI] Selected: " + version.getName() + " (ViaFabricPlus not loaded - UI only)");
return;
}
try {
Class<?> protocolVersionClass = Class.forName("com.viaversion.viaversion.api.protocol.version.ProtocolVersion");
Method getProtocolMethod = protocolVersionClass.getMethod("getProtocol", int.class);
Object targetVersion = getProtocolMethod.invoke(null, version.getProtocolId());
Class<?> protocolTranslatorClass = Class.forName("de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator");
Method setTargetVersionMethod = protocolTranslatorClass.getMethod("setTargetVersion", protocolVersionClass);
setTargetVersionMethod.invoke(null, targetVersion);
System.out.println("[FourAPI] ✓ Switched to " + version.getName() +
" (Protocol: " + version.getProtocolId() + ")");
System.out.println("[FourAPI] Changes will apply on next server connection");
} catch (Exception e) {
System.err.println("[FourAPI] Failed to switch version: " + e.getMessage());
e.printStackTrace();
}
}
public String getVersionName(MinecraftVersion version) {
if (version == null) return "Unknown";
return version.getName();
}
public boolean isNativeVersion(MinecraftVersion version) {
if (version == null) return false;
return version.isNative();
}
public void resetToNative() {
setVersion(nativeVersion);
}
public MinecraftVersion getActiveVersion() {
if (!viaFabricPlusLoaded) {
return selectedVersion;
}
try {
Class<?> protocolTranslatorClass = Class.forName("de.florianmichael.viafabricplus.protocoltranslator.ProtocolTranslator");
Method getTargetVersionMethod = protocolTranslatorClass.getMethod("getTargetVersion");
Object current = getTargetVersionMethod.invoke(null);
Class<?> protocolVersionClass = Class.forName("com.viaversion.viaversion.api.protocol.version.ProtocolVersion");
Method getVersionMethod = protocolVersionClass.getMethod("getVersion");
int protocolId = (int) getVersionMethod.invoke(current);
for (MinecraftVersion version : supportedVersions) {
if (version.getProtocolId() == protocolId) {
return version;
}
}
} catch (Exception e) {
System.err.println("[FourAPI] Error getting active version: " + e.getMessage());
}
return selectedVersion;
}
public boolean isViaActive() {
return viaFabricPlusLoaded && !selectedVersion.equals(nativeVersion);
}
public String getViaStatus() {
if (!viaFabricPlusLoaded) {
return "ViaFabricPlus not loaded";
}
return "ViaFabricPlus 4.0.5-BACKPORT";
}
public boolean isViaVersionLoaded() {
return viaFabricPlusLoaded;
}
public boolean isViaFabricPlusLoaded() {
return viaFabricPlusLoaded;
}
@Deprecated
public boolean isViaBackwardsLoaded() {
return viaFabricPlusLoaded;
}
@Deprecated
public boolean isViaRewindLoaded() {
return viaFabricPlusLoaded;
}
public static class MinecraftVersion {
@Getter
private final String name;
@Getter
private final int protocolId;
@Getter
private final boolean isNative;
public MinecraftVersion(String name, int protocolId, boolean isNative) {
this.name = name;
this.protocolId = protocolId;
this.isNative = isNative;
}
public int getVersion() {
return protocolId;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof MinecraftVersion other)) return false;
return protocolId == other.protocolId;
}
@Override
public int hashCode() {
return protocolId;
}
@Override
public String toString() {
return name + " (" + protocolId + ")";
}
}
}
MultiplayerScreenMixin
Указываем @Mixin(MultiplayerScreen.class)
и делаем что хотим или дальше говнокодим
Код:
private void handleViaVersionDropdown(int mouseX, int mouseY) {
float x = 5;
float y = 5;
float width = 100;
float headerHeight = 16;
List<MinecraftVersion> versions = viaManager.getSupportedVersions();
MinecraftVersion selectedVersion = viaManager.getSelectedVersion();
if (viaDropdownHeight > 0.1f) {
float contentY = y + headerHeight + 2;
float fadeProgress = viaDropdownTargetHeight > 0 ? viaDropdownHeight / viaDropdownTargetHeight : 0f;
hoveredVersionIndex = -1;
float itemHeight = 9f;
float scrollY = -viaDropdownScroll;
for (int i = 0; i < versions.size(); i++) {
MinecraftVersion version = versions.get(i);
float itemY = contentY + 2 + scrollY + (i * itemHeight);
if (itemY + itemHeight < contentY || itemY > contentY + viaDropdownHeight) {
continue;
}
boolean hovered = mouseX >= x && mouseX <= x + width
&& mouseY >= itemY && mouseY <= itemY + itemHeight
&& viaDropdownExpanded;
if (hovered) hoveredVersionIndex = i;
}
}
}
Всё дальше кайфуем от жизни!