Skip to content

Commit

Permalink
Merge pull request #10 from PotatoPresident/dev
Browse files Browse the repository at this point in the history
Fix offlineplayers not working
  • Loading branch information
PotatoPresident committed Feb 10, 2021
2 parents c318257 + 42e5441 commit 7f8f416
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 66 deletions.
7 changes: 7 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ repositories {
url = "https://maven.abusedmaster.xyz/"
}
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
mavenCentral()
}

sourceCompatibility = JavaVersion.VERSION_1_8
Expand All @@ -37,6 +38,8 @@ dependencies {

modImplementation "me.lucko:fabric-permissions-api:0.1-SNAPSHOT"
include "me.lucko:fabric-permissions-api:0.1-SNAPSHOT"

compileOnly 'net.luckperms:api:5.2'
}

processResources {
Expand Down Expand Up @@ -71,6 +74,10 @@ jar {
from "LICENSE"
}

loom {
accessWidener "src/main/resources/invview.accesswidener"
}

// configure the maven publication
publishing {
publications {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ minecraft_version=1.16.4
yarn_mappings=1.16.4+build.7
loader_version=0.10.8
# Mod Properties
mod_version=1.3.0
mod_version=1.4.0
maven_group=us.potatoboy
archives_base_name=InvView
# Dependencies
Expand Down
18 changes: 9 additions & 9 deletions src/main/java/us/potatoboy/invview/InvView.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,38 +21,38 @@

public class InvView implements ModInitializer {
private static MinecraftServer minecraftServer;
private static boolean isTrinkets = false;
public static boolean isTrinkets = false;
public static boolean isLuckPerms = false;

@Override
public void onInitialize() {
if (FabricLoader.getInstance().isModLoaded("trinkets")) {
isTrinkets = true;
}
isTrinkets = FabricLoader.getInstance().isModLoaded("trinkets");
isLuckPerms = FabricLoader.getInstance().isModLoaded("luckperms");

CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> {

LiteralCommandNode<ServerCommandSource> viewNode = CommandManager
.literal("view")
.requires(Permissions.require("invview.view", 2))
.requires(Permissions.require("invview.command.root", 2))
.build();

LiteralCommandNode<ServerCommandSource> invNode = CommandManager
.literal("inv")
.requires(Permissions.require("invview.inv", 2))
.requires(Permissions.require("invview.command.inv", 2))
.then(CommandManager.argument("target", GameProfileArgumentType.gameProfile())
.executes(ViewCommand::inv))
.build();

LiteralCommandNode<ServerCommandSource> echestNode = CommandManager
.literal("echest")
.requires(Permissions.require("invview.echest", 2))
.requires(Permissions.require("invview.command.echest", 2))
.then(CommandManager.argument("target", GameProfileArgumentType.gameProfile())
.executes(ViewCommand::eChest))
.build();

LiteralCommandNode<ServerCommandSource> trinketNode = CommandManager
.literal("trinkets")
.requires(Permissions.require("invview.trinket", 2))
.literal("trinket")
.requires(Permissions.require("invview.command.trinket", 2))
.then(CommandManager.argument("target", GameProfileArgumentType.gameProfile())
.executes(ViewCommand::trinkets))
.build();
Expand Down
120 changes: 68 additions & 52 deletions src/main/java/us/potatoboy/invview/ViewCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,22 @@
import com.mojang.authlib.GameProfile;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import dev.emi.trinkets.api.TrinketComponent;
import dev.emi.trinkets.api.TrinketSlots;
import dev.emi.trinkets.api.TrinketsApi;
import me.lucko.fabric.api.permissions.v0.Permissions;
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.cacheddata.CachedPermissionData;
import net.luckperms.api.util.Tristate;
import net.minecraft.command.argument.GameProfileArgumentType;
import net.minecraft.entity.passive.AbstractDonkeyEntity;
import net.minecraft.entity.passive.HorseBaseEntity;
import net.minecraft.inventory.EnderChestInventory;
import net.minecraft.inventory.SimpleInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.network.packet.s2c.play.ScreenHandlerSlotUpdateS2CPacket;
import net.minecraft.screen.GenericContainerScreenHandler;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.screen.SimpleNamedScreenHandlerFactory;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText;
import net.minecraft.text.TranslatableText;
import us.potatoboy.invview.gui.EnderChestScreenHandler;
import us.potatoboy.invview.gui.PlayerInventoryScreenHandler;
import us.potatoboy.invview.gui.TrinketScreenHandler;
import us.potatoboy.invview.mixin.HorseInventoryAccess;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

public class ViewCommand {
private static MinecraftServer minecraftServer = InvView.getMinecraftServer();
Expand All @@ -39,17 +27,20 @@ public static int inv(CommandContext<ServerCommandSource> context) throws Comman
ServerPlayerEntity player = context.getSource().getPlayer();
ServerPlayerEntity requestedPlayer = getRequestedPlayer(context);

if (isProtected(context, requestedPlayer)) {
return -1;
}

NamedScreenHandlerFactory screenHandlerFactory = new SimpleNamedScreenHandlerFactory((syncId, inv, playerEntity) ->
new PlayerInventoryScreenHandler(syncId, player.inventory, requestedPlayer.inventory),
requestedPlayer.getDisplayName()
);
isProtected(requestedPlayer).thenAcceptAsync(isProtected -> {
if (isProtected) {
context.getSource().sendError(new LiteralText("Requested inventory is protected"));
return;
} else {
NamedScreenHandlerFactory screenHandlerFactory = new SimpleNamedScreenHandlerFactory((syncId, inv, playerEntity) ->
new PlayerInventoryScreenHandler(syncId, player.inventory, requestedPlayer.inventory),
requestedPlayer.getDisplayName()
);

player.openHandledScreen(screenHandlerFactory);
}
});

player.openHandledScreen(screenHandlerFactory);

return 1;
}

Expand All @@ -58,17 +49,21 @@ public static int eChest(CommandContext<ServerCommandSource> context) throws Com
ServerPlayerEntity requestedPlayer = getRequestedPlayer(context);
EnderChestInventory requestedEchest = requestedPlayer.getEnderChestInventory();

if (isProtected(context, requestedPlayer)) {
return -1;
}

player.openHandledScreen(new SimpleNamedScreenHandlerFactory((syncId, inv, playerEntity) ->
new EnderChestScreenHandler(syncId, player.inventory, requestedEchest, 3, requestedPlayer),
requestedPlayer.getDisplayName()
));
isProtected(requestedPlayer).thenAcceptAsync(isProtected -> {
if (isProtected) {
context.getSource().sendError(new LiteralText("Requested inventory is protected"));
return;
} else {
player.openHandledScreen(new SimpleNamedScreenHandlerFactory((syncId, inv, playerEntity) ->
new EnderChestScreenHandler(syncId, player.inventory, requestedEchest, 3, requestedPlayer),
requestedPlayer.getDisplayName()
));
}
});

return 1;
}

/*
public static int mountInv(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
ServerPlayerEntity player = context.getSource().getPlayer();
Expand All @@ -77,32 +72,47 @@ public static int mountInv(CommandContext<ServerCommandSource> context) throws C
if (requestedPlayer.getVehicle() != null && requestedPlayer.getVehicle() instanceof HorseBaseEntity) {
HorseBaseEntity mount = (HorseBaseEntity) requestedPlayer.getVehicle();
mount.openInventory(player);
//mount.openInventory(player);
SimpleInventory inventory = ((HorseInventoryAccess)mount).getItems();
player.openHorseInventory(mount, inventory);
//player.openHorseInventory(mount, inventory);
if (player.currentScreenHandler != player.playerScreenHandler) {
player.closeCurrentScreen();
player.closeHandledScreen();
}
//player.openHandledScreen(new CanOpenHorseScreenHandler(player.currentScreenHandler.syncId, player.inventory, inventory, mount));
player.incrementScreenHandlerSyncId();
player.networkHandler.sendPacket(new OpenHorseScreenS2CPacket(player.screenHandlerSyncId, inventory.size(), 8));
player.currentScreenHandler = new MountScreenHandler(player.screenHandlerSyncId, player.inventory, inventory);
player.currentScreenHandler.addListener(player);
player.openHandledScreen(new SimpleNamedScreenHandlerFactory((syncId, inv, player1) ->
new MountScreenHandler(player.currentScreenHandler.syncId, player.inventory, inventory),
requestedPlayer.getDisplayName()
));
}
return 1;
}
*/
*/

public static int trinkets(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
ServerPlayerEntity player = context.getSource().getPlayer();
ServerPlayerEntity requestedPlayer = getRequestedPlayer(context);

if (isProtected(context, requestedPlayer)) {
return -1;
}
isProtected(requestedPlayer).thenAcceptAsync(isProtected -> {
if (isProtected) {
context.getSource().sendError(new LiteralText("Requested inventory is protected"));
return;
} else {
player.openHandledScreen(new SimpleNamedScreenHandlerFactory((syncId, inv, player1) ->
new TrinketScreenHandler(syncId, player.inventory, requestedPlayer),
requestedPlayer.getDisplayName()
));
}
});

player.openHandledScreen(new SimpleNamedScreenHandlerFactory((syncId, inv, player1) ->
new TrinketScreenHandler(syncId, player.inventory, requestedPlayer),
requestedPlayer.getDisplayName()
));
return 1;
}

Expand All @@ -118,12 +128,18 @@ private static ServerPlayerEntity getRequestedPlayer(CommandContext<ServerComman
return requestedPlayer;
}

private static boolean isProtected(CommandContext<ServerCommandSource> context, ServerPlayerEntity requested) throws CommandSyntaxException {
if (Permissions.check(requested, "invview.protected")) {
context.getSource().sendError(new LiteralText("Requested inventory is protected"));
return true;
}
private static CompletableFuture<Boolean> isProtected(ServerPlayerEntity playerEntity) {
if (!InvView.isLuckPerms) return CompletableFuture.completedFuture(playerEntity.hasPermissionLevel(3));

return LuckPermsProvider.get().getUserManager().loadUser(playerEntity.getUuid())
.thenApplyAsync(user -> {
CachedPermissionData permissionData = user.getCachedData().getPermissionData(user.getQueryOptions());
Tristate tristate = permissionData.checkPermission("invview.protected");
if (tristate.equals(Tristate.UNDEFINED)) {
return playerEntity.hasPermissionLevel(3);
}

return false;
return tristate.asBoolean();
});
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package us.potatoboy.invview.gui;

import net.minecraft.entity.passive.HorseBaseEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.screen.HorseScreenHandler;

public class MountScreenHandler extends HorseScreenHandler {
public MountScreenHandler(int syncId, PlayerInventory playerInventory, Inventory inventory, HorseBaseEntity entity) {
super(syncId, playerInventory, inventory, entity);
public MountScreenHandler(int syncId, PlayerInventory playerInventory, Inventory inventory) {
super(syncId, playerInventory, inventory, null);
}

@Override
Expand Down
10 changes: 9 additions & 1 deletion src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@
"issues": "https://github.com/PotatoPresident/InvView/issues",
"homepage": "https://www.curseforge.com/minecraft/mc-mods/inv-view"
},
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "https://discord.gg/ByaVuebAPb"
}
}
},
"license": "MIT",
"icon": "logo.png",
"environment": "*",
Expand All @@ -28,5 +35,6 @@
"fabricloader": ">=0.7.2",
"fabric": "*",
"minecraft": ">=1.16.2"
}
},
"accessWidener": "invview.accesswidener"
}
3 changes: 3 additions & 0 deletions src/main/resources/invview.accesswidener
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessWidener v1 named
accessible method net/minecraft/server/network/ServerPlayerEntity incrementScreenHandlerSyncId ()V
accessible field net/minecraft/server/network/ServerPlayerEntity screenHandlerSyncId I

0 comments on commit 7f8f416

Please sign in to comment.