Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/nightly' into merged
Browse files Browse the repository at this point in the history
# Conflicts:
#	ext/platform-inject-support/runtime/src/main/java/eu/cloudnetservice/ext/platforminject/runtime/platform/minestom/MinestomPlatformPluginManager.java
  • Loading branch information
DasBabyPixel committed Dec 14, 2024
2 parents 07e485c + 86bcfee commit f577403
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ public MinestomPlatformPluginManager() {
layer.install(createFixedBinding(MinecraftServer.getTagManager(), TagManager.class));
layer.install(createFixedBinding(MinecraftServer.getTeamManager(), TeamManager.class));
layer.install(createFixedBinding(MinecraftServer.getBlockManager(), BlockManager.class));
layer.install(createFixedBinding(MinecraftServer.getPacketParser(), PacketParser.class));
layer.install(createFixedBinding(MinecraftServer.getRecipeManager(), RecipeManager.class));
layer.install(createFixedBinding(MinecraftServer.getBossBarManager(), BossBarManager.class));
layer.install(createFixedBinding(MinecraftServer.getCommandManager(), CommandManager.class));
layer.install(createFixedBinding(MinecraftServer.getPacketParser(), PacketParser.Client.class));
layer.install(createFixedBinding(MinecraftServer.getInstanceManager(), InstanceManager.class));
layer.install(createFixedBinding(MinecraftServer.getExceptionManager(), ExceptionManager.class));
layer.install(createFixedBinding(MinecraftServer.getBenchmarkManager(), BenchmarkManager.class));
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,13 @@ vault = "1.7.1"
adventure = "4.17.0"
modlauncher = "8.1.3"
npcLib = "3.0.0-beta10"
packetEvents = "2.6.0"
packetEvents = "2.7.0"
placeholderApi = "2.11.6"
adventure-serializer-bungee = "4.3.4"
luckPermsApi = "5.4"

# fabric platform special dependencies
minecraft = "1.21.3"
minecraft = "1.21.4"
fabricLoader = "0.16.9"


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,11 @@
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import java.util.Collections;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.function.BiFunction;
import java.util.function.Supplier;
import lombok.NonNull;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandManager;
Expand All @@ -57,11 +59,10 @@
@ProvidesFor(platform = "minestom", types = {PlatformBridgeManagement.class, BridgeManagement.class})
public final class MinestomBridgeManagement extends PlatformBridgeManagement<Player, NetworkPlayerServerInfo> {

private static final BiFunction<Player, String, Boolean> PERM_FUNCTION = Player::hasPermission;

private final CommandManager commandManager;
private final ConnectionManager connectionManager;
private final PlayerExecutor directGlobalExecutor;
private final Supplier<MinestomPermissionChecker> permissionChecker;

@Inject
public MinestomBridgeManagement(
Expand All @@ -70,6 +71,7 @@ public MinestomBridgeManagement(
@NonNull NetworkClient networkClient,
@NonNull CommandManager commandManager,
@NonNull GlobalEventHandler eventHandler,
@NonNull ServiceRegistry serviceRegistry,
@NonNull ServiceTaskProvider taskProvider,
@NonNull BridgeServiceHelper serviceHelper,
@NonNull ConnectionManager connectionManager,
Expand All @@ -89,7 +91,13 @@ public MinestomBridgeManagement(
// init fields
this.commandManager = commandManager;
this.connectionManager = connectionManager;

this.permissionChecker = () -> Objects.requireNonNullElse(
serviceRegistry.firstProvider(MinestomPermissionChecker.class),
((player, _) -> player.getPermissionLevel() > 0));

this.directGlobalExecutor = new MinestomDirectPlayerExecutor(
this.permissionChecker,
commandManager,
PlayerExecutor.GLOBAL_UNIQUE_ID,
connectionManager::getOnlinePlayers);
Expand Down Expand Up @@ -126,12 +134,15 @@ public void registerServices(@NonNull ServiceRegistry registry) {

@Override
public @NonNull BiFunction<Player, String, Boolean> permissionFunction() {
return PERM_FUNCTION;
return this.permissionChecker.get()::hasPermission;
}

@Override
public boolean isOnAnyFallbackInstance(@NonNull Player player) {
return this.isOnAnyFallbackInstance(this.ownNetworkServiceInfo.serverName(), null, player::hasPermission);
return this.isOnAnyFallbackInstance(
this.ownNetworkServiceInfo.serverName(),
null,
perm -> this.permissionFunction().apply(player, perm));
}

@Override
Expand All @@ -141,7 +152,7 @@ public boolean isOnAnyFallbackInstance(@NonNull Player player) {

@Override
public @NonNull Optional<ServiceInfoSnapshot> fallback(@NonNull Player player, @Nullable String currServer) {
return this.fallback(player.getUuid(), currServer, null, player::hasPermission);
return this.fallback(player.getUuid(), currServer, null, perm -> this.permissionFunction().apply(player, perm));
}

@Override
Expand All @@ -159,6 +170,7 @@ public void removeFallbackProfile(@NonNull Player player) {
return uniqueId.equals(PlayerExecutor.GLOBAL_UNIQUE_ID)
? this.directGlobalExecutor
: new MinestomDirectPlayerExecutor(
this.permissionChecker,
this.commandManager,
uniqueId,
() -> Collections.singleton(this.connectionManager.getOnlinePlayerByUuid(uniqueId)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,17 @@

final class MinestomDirectPlayerExecutor extends PlatformPlayerExecutorAdapter<Player> {

private final Supplier<MinestomPermissionChecker> permissionChecker;
private final CommandManager commandManager;

public MinestomDirectPlayerExecutor(
@NonNull Supplier<MinestomPermissionChecker> permissionChecker,
@NonNull CommandManager commandManager,
@NonNull UUID uniqueId,
@NonNull Supplier<? extends Collection<? extends Player>> supplier
) {
super(uniqueId, supplier);
this.permissionChecker = permissionChecker;
this.commandManager = commandManager;
}

Expand Down Expand Up @@ -79,7 +82,7 @@ public void sendTitle(@NonNull Title title) {
@Override
public void sendChatMessage(@NonNull Component message, @Nullable String permission) {
this.forEach(player -> {
if (permission == null || player.hasPermission(permission)) {
if (permission == null || this.permissionChecker.get().hasPermission(player, permission)) {
player.sendMessage(message);
}
});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright 2019-2024 CloudNetService team & contributors
*
* 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 eu.cloudnetservice.modules.bridge.platform.minestom;

import lombok.NonNull;
import net.minestom.server.entity.Player;

@FunctionalInterface
public interface MinestomPermissionChecker {

boolean hasPermission(@NonNull Player player, @NonNull String permission);

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,14 @@
package eu.cloudnetservice.modules.bridge.platform.minestom;

import eu.cloudnetservice.ext.component.ComponentFormats;
import eu.cloudnetservice.modules.bridge.platform.PlatformBridgeManagement;
import eu.cloudnetservice.modules.bridge.platform.helper.ServerPlatformHelper;
import eu.cloudnetservice.modules.bridge.player.NetworkPlayerServerInfo;
import eu.cloudnetservice.wrapper.holder.ServiceInfoHolder;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import lombok.NonNull;
import net.minestom.server.entity.Player;
import net.minestom.server.event.EventFilter;
import net.minestom.server.event.EventNode;
import net.minestom.server.event.GlobalEventHandler;
import net.minestom.server.event.player.AsyncPlayerPreLoginEvent;
import net.minestom.server.event.player.PlayerDisconnectEvent;
import net.minestom.server.event.player.PlayerSpawnEvent;

Expand All @@ -37,33 +33,38 @@ public final class MinestomPlayerManagementListener {

private final ServiceInfoHolder serviceInfoHolder;
private final ServerPlatformHelper serverPlatformHelper;
private final PlatformBridgeManagement<Player, NetworkPlayerServerInfo> management;
private final MinestomBridgeManagement management;

@Inject
public MinestomPlayerManagementListener(
@NonNull GlobalEventHandler eventHandler,
@NonNull ServiceInfoHolder serviceInfoHolder,
@NonNull ServerPlatformHelper serverPlatformHelper,
@NonNull PlatformBridgeManagement<Player, NetworkPlayerServerInfo> management
@NonNull MinestomBridgeManagement management
) {
this.serviceInfoHolder = serviceInfoHolder;
this.serverPlatformHelper = serverPlatformHelper;
this.management = management;
// listen on these events and redirect them into the methods
var node = EventNode.type("cloudnet-bridge", EventFilter.PLAYER);
eventHandler.addChild(node
.addListener(AsyncPlayerPreLoginEvent.class, this::handleLogin)
.addListener(PlayerSpawnEvent.class, this::handleLogin)
.addListener(PlayerSpawnEvent.class, this::handleJoin)
.addListener(PlayerDisconnectEvent.class, this::handleDisconnect));
}

private void handleLogin(@NonNull AsyncPlayerPreLoginEvent event) {
private void handleLogin(@NonNull PlayerSpawnEvent event) {
if (!event.isFirstSpawn()) {
return;
}

var player = event.getPlayer();
var task = this.management.selfTask();
var permissionFunction = this.management.permissionFunction();
// check if the current task is present
if (task != null) {
// check if maintenance is activated
if (task.maintenance() && !player.hasPermission("cloudnet.bridge.maintenance")) {
if (task.maintenance() && !permissionFunction.apply(player, "cloudnet.bridge.maintenance")) {
this.management.configuration().handleMessage(
player.getLocale(),
"server-join-cancel-because-maintenance",
Expand All @@ -73,7 +74,7 @@ private void handleLogin(@NonNull AsyncPlayerPreLoginEvent event) {
}
// check if a custom permission is required to join
var permission = task.propertyHolder().getString("requiredPermission");
if (permission != null && !player.hasPermission(permission)) {
if (permission != null && !permissionFunction.apply(player, permission)) {
this.management.configuration().handleMessage(
player.getLocale(),
"server-join-cancel-because-permission",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import eu.cloudnetservice.driver.registry.ServiceRegistry;
import eu.cloudnetservice.ext.platforminject.api.stereotype.ProvidesFor;
import eu.cloudnetservice.modules.bridge.WorldPosition;
import eu.cloudnetservice.modules.bridge.platform.minestom.MinestomBridgeManagement;
import eu.cloudnetservice.modules.signs.Sign;
import eu.cloudnetservice.modules.signs.SignManagement;
import eu.cloudnetservice.modules.signs.platform.PlatformSign;
Expand Down Expand Up @@ -51,6 +52,7 @@ public class MinestomSignManagement extends PlatformSignManagement<Player, Tuple
private final GlobalEventHandler eventHandler;
private final InstanceManager instanceManager;
private final SchedulerManager schedulerManager;
private final MinestomBridgeManagement bridgeManagement;

@Inject
protected MinestomSignManagement(
Expand All @@ -61,6 +63,7 @@ protected MinestomSignManagement(
@NonNull SchedulerManager schedulerManager,
@NonNull WrapperConfiguration wrapperConfig,
@NonNull CloudServiceProvider serviceProvider,
@NonNull MinestomBridgeManagement bridgeManagement,
@NonNull @Named("taskScheduler") ScheduledExecutorService executorService
) {
super(eventManager, MoreExecutors.directExecutor(), wrapperConfig, serviceProvider, executorService);
Expand All @@ -69,6 +72,7 @@ protected MinestomSignManagement(
this.eventHandler = eventHandler;
this.instanceManager = instanceManager;
this.schedulerManager = schedulerManager;
this.bridgeManagement = bridgeManagement;
}

@Override
Expand All @@ -90,14 +94,16 @@ protected void startKnockbackTask() {
var location = minestomSigns.signLocation();
if (location != null) {
var vec = location.first().asVec();
var permissionFunction = this.bridgeManagement.permissionFunction();
for (var entity : location.second().getNearbyEntities(location.first(), distance)) {
if (entity instanceof Player player
&& (conf.bypassPermission() == null || !player.hasPermission(conf.bypassPermission()))) {
entity.setVelocity(entity.getPosition().asVec()
.sub(vec)
.normalize()
.mul(conf.strength())
.withY(0.2));
if (entity instanceof Player player) {
if (conf.bypassPermission() == null || !permissionFunction.apply(player, conf.bypassPermission())) {
entity.setVelocity(entity.getPosition().asVec()
.sub(vec)
.normalize()
.mul(conf.strength())
.withY(0.2));
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import eu.cloudnetservice.common.language.I18n;
import eu.cloudnetservice.driver.provider.GroupConfigurationProvider;
import eu.cloudnetservice.driver.service.ServiceTemplate;
import eu.cloudnetservice.modules.bridge.platform.minestom.MinestomBridgeManagement;
import eu.cloudnetservice.modules.signs.Sign;
import eu.cloudnetservice.modules.signs.configuration.SignsConfiguration;
import eu.cloudnetservice.modules.signs.platform.minestom.MinestomSignManagement;
Expand All @@ -43,9 +44,6 @@ public class SignsCommand extends Command {
private static final ArgumentLiteral CLEANUP_LITERAL = new ArgumentLiteral("cleanup");
private static final ArgumentLiteral CLEANUP_ALL_LITERAL = new ArgumentLiteral("cleanupAll");

private static final CommandCondition DEFAULT_CONDITION = (sender, $) ->
sender instanceof Player && sender.hasPermission("cloudnet.command.cloudsign");

private final Argument<String> template = new ArgumentString("templatePath") {
@Override
public @NonNull String parse(@NonNull CommandSender sender, @NonNull String input) throws ArgumentSyntaxException {
Expand All @@ -61,25 +59,31 @@ public class SignsCommand extends Command {
private final Argument<String> targetGroup;
private final Argument<String> world;
private final MinestomSignManagement signManagement;
private final MinestomBridgeManagement bridgeManagement;

@Inject
public SignsCommand(
@NonNull MinestomSignManagement signManagement,
@NonNull GroupConfigurationProvider groupProvider
@NonNull GroupConfigurationProvider groupProvider,
@NonNull MinestomBridgeManagement bridgeManagement
) {
super("cloudsign", "cs", "signs", "cloudsigns");

this.targetGroup = this.createTargetGroupArgument(groupProvider);
this.bridgeManagement = bridgeManagement;
this.world = new ArgumentString("world");
this.signManagement = signManagement;

var createLiteral = new ArgumentLiteral("create");

this.addConditionalSyntax(DEFAULT_CONDITION, this::handleCreate, createLiteral, this.targetGroup, this.template);
this.addConditionalSyntax(DEFAULT_CONDITION, this::handleRemove, REMOVE_LITERAL);
this.addConditionalSyntax(DEFAULT_CONDITION, this::handleRemoveAll, REMOVE_ALL_LITERAL);
this.addConditionalSyntax(DEFAULT_CONDITION, this::handleCleanup, CLEANUP_LITERAL, this.world);
this.addConditionalSyntax(DEFAULT_CONDITION, this::handleCleanupAll, CLEANUP_ALL_LITERAL);
CommandCondition defaultCondition = (sender, _) -> sender instanceof Player player
&& bridgeManagement.permissionFunction().apply(player, "cloudnet.command.cloudsign");

this.addConditionalSyntax(defaultCondition, this::handleCreate, createLiteral, this.targetGroup, this.template);
this.addConditionalSyntax(defaultCondition, this::handleRemove, REMOVE_LITERAL);
this.addConditionalSyntax(defaultCondition, this::handleRemoveAll, REMOVE_ALL_LITERAL);
this.addConditionalSyntax(defaultCondition, this::handleCleanup, CLEANUP_LITERAL, this.world);
this.addConditionalSyntax(defaultCondition, this::handleCleanupAll, CLEANUP_ALL_LITERAL);
}

private @NonNull ArgumentString createTargetGroupArgument(@NonNull GroupConfigurationProvider groupProvider) {
Expand Down
Loading

0 comments on commit f577403

Please sign in to comment.