Skip to content

Commit 730331c

Browse files
committed
bukkit permission handler
1 parent 9e5e682 commit 730331c

3 files changed

Lines changed: 81 additions & 3 deletions

File tree

src/main/java/catserver/server/BukkitInjector.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package catserver.server;
22

33
import catserver.server.entity.CraftCustomEntity;
4-
import catserver.server.launch.Java11Support;
54
import com.cleanroommc.hackery.enums.EnumHackery;
65
import net.minecraft.block.Block;
76
import net.minecraft.enchantment.Enchantment;
@@ -10,18 +9,21 @@
109
import net.minecraft.potion.Potion;
1110
import net.minecraft.tileentity.BannerPattern;
1211
import net.minecraft.util.ResourceLocation;
13-
import net.minecraftforge.common.util.EnumHelper;
1412
import net.minecraftforge.fml.common.FMLLog;
1513
import net.minecraftforge.fml.common.registry.EntityRegistry;
1614
import net.minecraftforge.fml.common.registry.ForgeRegistries;
1715
import net.minecraftforge.fml.relauncher.ReflectionHelper;
1816
import net.minecraftforge.registries.GameData;
17+
import net.minecraftforge.server.permission.DefaultPermissionLevel;
1918
import org.apache.logging.log4j.Level;
2019
import org.bukkit.Material;
2120
import org.bukkit.block.Biome;
2221
import org.bukkit.block.banner.PatternType;
2322
import org.bukkit.entity.EntityType;
23+
import org.bukkit.permissions.Permission;
24+
import org.bukkit.permissions.PermissionDefault;
2425
import org.bukkit.potion.PotionEffectType;
26+
import org.bukkit.util.permissions.DefaultPermissions;
2527

2628
import java.util.Map;
2729

@@ -127,4 +129,14 @@ public static void registerBannerPatterns() {
127129
}
128130
}
129131
}
132+
133+
public static void registerDefaultPermission(String name, DefaultPermissionLevel level, String desc) {
134+
PermissionDefault permissionDefault = switch (level) {
135+
case ALL -> PermissionDefault.TRUE;
136+
case OP -> PermissionDefault.OP;
137+
default -> PermissionDefault.FALSE;
138+
};
139+
Permission permission = new Permission(name, desc, permissionDefault);
140+
DefaultPermissions.registerPermission(permission);
141+
}
130142
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package catserver.server;
2+
3+
import com.google.common.util.concurrent.Futures;
4+
import com.mojang.authlib.GameProfile;
5+
import net.minecraft.entity.player.EntityPlayer;
6+
import net.minecraft.server.MinecraftServer;
7+
import net.minecraftforge.server.permission.DefaultPermissionLevel;
8+
import net.minecraftforge.server.permission.IPermissionHandler;
9+
import net.minecraftforge.server.permission.context.IContext;
10+
import org.bukkit.Bukkit;
11+
import org.bukkit.entity.Player;
12+
import org.bukkit.permissions.Permission;
13+
14+
import javax.annotation.Nullable;
15+
import java.util.ArrayList;
16+
import java.util.Collection;
17+
import java.util.List;
18+
19+
public class BukkitPermissionsHandler implements IPermissionHandler {
20+
@Override
21+
public void registerNode(String node, DefaultPermissionLevel level, String desc) {
22+
BukkitInjector.registerDefaultPermission(node, level, desc);
23+
}
24+
25+
@Override
26+
public Collection<String> getRegisteredNodes() {
27+
List<String> list = new ArrayList<>();
28+
for (Permission permission : Bukkit.getPluginManager().getPermissions()) {
29+
String name = permission.getName();
30+
list.add(name);
31+
}
32+
return list;
33+
}
34+
35+
@Override
36+
public boolean hasPermission(GameProfile profile, String node, @Nullable IContext context) {
37+
if (context != null) {
38+
EntityPlayer player = context.getPlayer();
39+
if (player != null) {
40+
return player.getBukkitEntity().hasPermission(node);
41+
}
42+
43+
}
44+
Player player = Bukkit.getServer().getPlayer(profile.getId());
45+
if (player != null) {
46+
return player.hasPermission(node);
47+
} else {
48+
Permission perm = Bukkit.getServer().getPluginManager().getPermission(node);
49+
boolean isOp = MinecraftServer.getServerInst().getPlayerList().canSendCommands(profile);
50+
if (perm != null) {
51+
return perm.getDefault().getValue(isOp);
52+
} else {
53+
return Permission.DEFAULT_PERMISSION.getValue(isOp);
54+
}
55+
}
56+
}
57+
58+
@Override
59+
public String getNodeDescription(String node) {
60+
Permission permission = Bukkit.getPluginManager().getPermission(node);
61+
return permission == null ? "" : permission.getDescription();
62+
}
63+
}

src/main/java/net/minecraftforge/fml/common/Loader.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.Properties;
3939
import java.util.Set;
4040

41+
import catserver.server.BukkitPermissionsHandler;
4142
import com.cleanroommc.common.CleanroomContainer;
4243
import com.cleanroommc.common.ConfigAnytimeContainer;
4344
import com.cleanroommc.common.MixinContainer;
@@ -73,6 +74,7 @@
7374
import net.minecraftforge.registries.GameData;
7475
import net.minecraftforge.registries.ObjectHolderRegistry;
7576

77+
import net.minecraftforge.server.permission.PermissionAPI;
7678
import org.apache.commons.io.IOUtils;
7779
import org.apache.logging.log4j.Level;
7880

@@ -637,6 +639,7 @@ public void preinitializeMods()
637639
GameData.fireRegistryEvents(rl -> !rl.equals(GameData.RECIPES));
638640
FMLCommonHandler.instance().fireSidedRegistryEvents();
639641
ObjectHolderRegistry.INSTANCE.applyObjectHolders();
642+
PermissionAPI.setPermissionHandler(new BukkitPermissionsHandler());
640643
ItemStackHolderInjector.INSTANCE.inject();
641644
modController.transition(LoaderState.INITIALIZATION, false);
642645
progressBar.step("Initializing Minecraft Engine");
@@ -645,7 +648,7 @@ public void preinitializeMods()
645648
private void disableRequestedMods()
646649
{
647650
String forcedModList = System.getProperty("fml.modStates", "");
648-
FMLLog.log.trace("Received a system property request \'{}\'",forcedModList);
651+
FMLLog.log.trace("Received a system property request '{}'",forcedModList);
649652
Map<String, String> sysPropertyStateList = Splitter.on(CharMatcher.anyOf(";:"))
650653
.omitEmptyStrings().trimResults().withKeyValueSeparator("=")
651654
.split(forcedModList);

0 commit comments

Comments
 (0)