Skip to content

Commit cf3f7a3

Browse files
authored
Merge pull request #478 from KingGamerXd/master
Fixed: Player inventory is no longer incorrectly treated as an opened inventory. Re-implemented: Cross-version support Tested on: 1.8.9, 1.17.1, 1.20.4, 1.21.4 Changed: Renamed is_craftable to default_craftable in the minions registry. Added: /serverstatus command to check server status. Fixed: Error when opening collections that include a minion display.
2 parents c5e033f + 7dc2f73 commit cf3f7a3

16 files changed

Lines changed: 498 additions & 60 deletions

File tree

configuration/items/minions.yml

Lines changed: 52 additions & 52 deletions
Large diffs are not rendered by default.

configuration/resources.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
"pterodactyl-mode": false,
77
"spark": false,
88
"require-authentication": false,
9+
"cross-version-support": true,
910
"host-name": "0.0.0.0",
1011
"transfer-timeout": "800",
1112
"sandbox-mode": true,
1213
"anticheat": true
13-
}
14+
}

type.generic/src/main/java/net/swofty/types/generic/collection/CollectionCategory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.swofty.types.generic.item.components.MinionComponent;
1212
import net.swofty.types.generic.item.crafting.SkyBlockRecipe;
1313
import net.swofty.types.generic.item.updater.NonPlayerItemUpdater;
14+
import net.swofty.types.generic.minion.MinionRegistry;
1415
import net.swofty.types.generic.user.SkyBlockPlayer;
1516

1617
import java.util.ArrayList;
@@ -54,7 +55,7 @@ public List<String> getDisplay(List<String> lore, String itemDisplay) {
5455
case RECIPE -> {
5556
((UnlockRecipe) unlock).getRecipes().forEach(recipe -> {
5657
if (recipe.getResult().getDisplayName().contains("Minion") && !Arrays.toString(lore.toArray()).contains("Minion §7Recipes")) {
57-
lore.add("§9 " + StringUtility.toNormalCase(recipe.getResult().getAttributeHandler().getMinionType().toString()) + " Minion §7Recipes");
58+
lore.add("§9 " + StringUtility.toNormalCase(MinionRegistry.fromItemType(recipe.getResult().getAttributeHandler().getPotentialType()).name()) + " Minion §7Recipes");
5859
} else if (!recipe.getResult().getDisplayName().contains("Minion")) {
5960
lore.add("§7 §e" + recipe.getResult().getDisplayName() + " §7Recipe");
6061
}

type.generic/src/main/java/net/swofty/types/generic/event/actions/player/gui/ActionPlayerInventoryClick.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.kyori.adventure.text.Component;
44
import net.minestom.server.event.inventory.InventoryCloseEvent;
55
import net.minestom.server.event.inventory.InventoryPreClickEvent;
6+
import net.minestom.server.inventory.PlayerInventory;
67
import net.minestom.server.inventory.click.ClickType;
78
import net.minestom.server.item.ItemComponent;
89
import net.swofty.commons.StringUtility;
@@ -66,9 +67,11 @@ public void run(InventoryPreClickEvent event) {
6667
if (event.getInventory() == null) {
6768
if (!gui.allowHotkeying() && isHotKey(event)) {
6869
event.setCancelled(true);
69-
return;
7070
}
71-
gui.onBottomClick(event);
71+
return;
72+
}
73+
if (event.getInventory() instanceof PlayerInventory){
74+
gui.onBottomClick(event);
7275
} else {
7376
int slot = event.getSlot();
7477
GUIItem item = gui.get(slot);
@@ -94,7 +97,7 @@ public void run(InventoryPreClickEvent event) {
9497
gui.onClose(new InventoryCloseEvent(
9598
player.getOpenInventory(),
9699
player,
97-
true
100+
false
98101
), SkyBlockInventoryGUI.CloseReason.SIGN_OPENED);
99102

100103
new SkyBlockSignGUI(player).open(query.lines()).thenAccept(string -> {

type.generic/src/main/java/net/swofty/types/generic/item/ItemConfigParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ yield new EnchantableComponent(
181181
case "MINION" -> {
182182
String minionType = (String) config.get("minion_type");
183183
String baseItem = (String) config.get("base_item");
184-
boolean isByDefaultCraftable = (boolean) config.get("is_craftable");
184+
boolean isByDefaultCraftable = (boolean) config.get("default_craftable");
185185

186186
List<String> ingredients = (List<String>) config.get("ingredients");
187187
List<MinionIngredient> ingredientsMap = new ArrayList<>();

type.generic/src/main/java/net/swofty/types/generic/minion/MinionRegistry.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import net.swofty.types.generic.minion.minions.foraging.*;
1111
import net.swofty.types.generic.minion.minions.mining.*;
1212

13+
import java.util.Arrays;
14+
1315
public enum MinionRegistry {
1416
COBBLESTONE(MinionCobblestone.class, ItemType.COBBLESTONE_MINION),
1517
COAL(MinionCoal.class, ItemType.COAL_MINION),
@@ -77,6 +79,9 @@ public enum MinionRegistry {
7779
this.minionClass = minionClass;
7880
this.itemType = ItemType;
7981
}
82+
public static MinionRegistry fromItemType(ItemType itemType){
83+
return Arrays.stream(values()).filter(minionType -> minionType.itemType == itemType).findFirst().orElse(null);
84+
}
8085

8186
public SkyBlockMinion asSkyBlockMinion() {
8287
try {

velocity.extension/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ dependencies {
3232
// implementation("net.swofty:AtlasRedisAPI:1.1.4")
3333
implementation(project(":commons"))
3434

35+
implementation("com.viaversion:vialoader:4.0.2")
36+
implementation("com.viaversion:viabackwards-common:5.3.2")
37+
implementation("com.viaversion:viarewind-common:4.0.7")
38+
implementation("com.viaversion:viaversion:5.3.2")
39+
3540
implementation("io.netty:netty-all:4.1.110.Final")
3641

3742
implementation("net.bytebuddy:byte-buddy:1.14.16")

velocity.extension/src/main/java/net/swofty/velocity/SkyBlockVelocity.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package net.swofty.velocity;
22

33
import com.google.inject.Inject;
4+
import com.velocitypowered.api.command.CommandManager;
5+
import com.velocitypowered.api.command.CommandMeta;
46
import com.velocitypowered.api.event.AwaitingEventExecutor;
57
import com.velocitypowered.api.event.EventTask;
68
import com.velocitypowered.api.event.PostOrder;
@@ -22,6 +24,10 @@
2224
import com.velocitypowered.api.proxy.server.ServerPing;
2325
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
2426
import com.velocitypowered.proxy.network.Connections;
27+
import com.viaversion.vialoader.ViaLoader;
28+
import com.viaversion.vialoader.impl.platform.ViaBackwardsPlatformImpl;
29+
import com.viaversion.vialoader.impl.platform.ViaRewindPlatformImpl;
30+
import com.viaversion.vialoader.impl.platform.ViaVersionPlatformImpl;
2531
import io.netty.channel.Channel;
2632
import io.netty.channel.ChannelPipeline;
2733
import lombok.Getter;
@@ -30,6 +36,7 @@
3036
import net.swofty.commons.ServerType;
3137
import net.swofty.commons.proxy.FromProxyChannels;
3238
import net.swofty.redisapi.api.RedisAPI;
39+
import net.swofty.velocity.command.ServerStatusCommand;
3340
import net.swofty.velocity.data.CoopDatabase;
3441
import net.swofty.velocity.data.ProfilesDatabase;
3542
import net.swofty.velocity.data.UserDatabase;
@@ -41,9 +48,12 @@
4148
import net.swofty.velocity.redis.ChannelListener;
4249
import net.swofty.velocity.redis.RedisListener;
4350
import net.swofty.velocity.redis.RedisMessage;
51+
import net.swofty.velocity.viaversion.injector.SkyBlockViaInjector;
52+
import net.swofty.velocity.viaversion.loader.SkyBlockVLLoader;
4453
import org.json.JSONObject;
4554
import org.reflections.Reflections;
4655

56+
import java.io.File;
4757
import java.lang.reflect.InvocationTargetException;
4858
import java.net.InetSocketAddress;
4959
import java.nio.file.Path;
@@ -68,6 +78,8 @@ public class SkyBlockVelocity {
6878
private static RegisteredServer limboServer;
6979
@Getter
7080
private static boolean shouldAuthenticate = false;
81+
@Getter
82+
private static boolean supportCrossVersion = false;
7183
@Inject
7284
private ProxyServer proxy;
7385

@@ -84,6 +96,14 @@ public SkyBlockVelocity(ProxyServer tempServer, Logger tempLogger, @DataDirector
8496
public void onProxyInitialization(ProxyInitializeEvent event) {
8597
server = proxy;
8698
shouldAuthenticate = Configuration.getOrDefault("require-authentication", false);
99+
supportCrossVersion = Configuration.getOrDefault("cross-version-support" , false);
100+
101+
/**
102+
* initialize cross version support
103+
*/
104+
if (supportCrossVersion) {
105+
ViaLoader.init(null, new SkyBlockVLLoader(), new SkyBlockViaInjector(), null, ViaBackwardsPlatformImpl::new, ViaRewindPlatformImpl::new);
106+
}
87107
/**
88108
* Register packets
89109
*/
@@ -104,6 +124,19 @@ public void onProxyInitialization(ProxyInitializeEvent event) {
104124
: EventTask.async(() -> removePlayer(disconnectEvent.getPlayer()))
105125
);
106126

127+
/**
128+
* Register commands
129+
*/
130+
131+
CommandManager commandManager = proxy.getCommandManager();
132+
CommandMeta statusCommandMeta = commandManager.metaBuilder("serverstatus")
133+
.aliases("status")
134+
.plugin(this)
135+
.build();
136+
137+
commandManager.register(statusCommandMeta , new ServerStatusCommand());
138+
139+
107140
/**
108141
* Handle database
109142
*/
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package net.swofty.velocity.command;
2+
3+
import com.velocitypowered.api.command.SimpleCommand;
4+
import net.swofty.velocity.gamemanager.GameManager;
5+
import net.swofty.velocity.gamemanager.GameManager.GameServer;
6+
import net.swofty.commons.ServerType;
7+
import net.kyori.adventure.text.Component;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.Map;
12+
13+
public class ServerStatusCommand implements SimpleCommand {
14+
@Override
15+
public void execute(Invocation invocation) {
16+
invocation.source().sendMessage(Component.text("***** Server Status *****"));
17+
18+
Map<ServerType, ArrayList<GameServer>> serverMap = GameManager.getServers();
19+
if (serverMap.isEmpty()) {
20+
invocation.source().sendMessage(Component.text("No servers are currently registered."));
21+
return;
22+
}
23+
24+
for (Map.Entry<ServerType, ArrayList<GameServer>> entry : serverMap.entrySet()) {
25+
ServerType type = entry.getKey();
26+
List<GameServer> gameServers = entry.getValue();
27+
28+
invocation.source().sendMessage(Component.text(type.name() + ":"));
29+
30+
if (gameServers.isEmpty()) {
31+
invocation.source().sendMessage(Component.text(" - No servers of this type are currently online."));
32+
continue;
33+
}
34+
35+
for (GameServer server : gameServers) {
36+
String msg = String.format(" - %s (ID: %s, Port: %d, PlayerCount: %d)",
37+
server.displayName(),
38+
server.internalID(),
39+
server.registeredServer().getServerInfo().getAddress().getPort(),
40+
server.registeredServer().getPlayersConnected().size()
41+
);
42+
invocation.source().sendMessage(Component.text(msg));
43+
}
44+
}
45+
}
46+
}

velocity.extension/src/main/java/net/swofty/velocity/gamemanager/GameManager.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,6 @@ FromProxyChannels.PING_SERVER, new JSONObject()
106106
}
107107
}).delay(Duration.ofMillis(SLEEP_TIME - 100)).schedule();
108108
});
109-
110-
System.out.println(serverType.name() + ": " + registeredServers.stream().map(gameServer -> "mini" + gameServer.displayName() + " (" + gameServer.internalID() + ")").toList());
111109
});
112110
}).repeat(Duration.ofMillis(SLEEP_TIME)).schedule();
113111
}

0 commit comments

Comments
 (0)