flan/src/main/java/com/flemmli97/flan/gui/PermissionScreenHandler.java

135 lines
5.9 KiB
Java

package com.flemmli97.flan.gui;
import com.flemmli97.flan.claim.Claim;
import com.flemmli97.flan.claim.EnumPermission;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.screen.NamedScreenHandlerFactory;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.Slot;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.sound.SoundEvents;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
public class PermissionScreenHandler extends ServerOnlyScreenHandler {
private final Claim claim;
private final String group;
private final int page;
private PermissionScreenHandler(int syncId, PlayerInventory playerInventory, Claim claim, String group, int page) {
super(syncId, playerInventory, 6, claim, group, page);
this.claim = claim;
this.group = group;
this.page = page;
}
public static void openClaimMenu(PlayerEntity player, Claim claim, String group) {
NamedScreenHandlerFactory fac = new NamedScreenHandlerFactory() {
@Override
public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) {
return new PermissionScreenHandler(syncId, inv, claim, group, 0);
}
@Override
public Text getDisplayName() {
return Text.of(group == null ? "Global-Permissions" : String.format("%s-Permissions", group));
}
};
player.openHandledScreen(fac);
}
private static void openClaimMenu(PlayerEntity player, Claim claim, String group, int page) {
NamedScreenHandlerFactory fac = new NamedScreenHandlerFactory() {
@Override
public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) {
return new PermissionScreenHandler(syncId, inv, claim, group, page);
}
@Override
public Text getDisplayName() {
return Text.of(group == null ? "Global-Permissions" : String.format("%s-Permissions", group));
}
};
player.openHandledScreen(fac);
}
@Override
protected void fillInventoryWith(PlayerEntity player, Inventory inv, Object... additionalData) {
for (int i = 0; i < 54; i++) {
int page = (int) additionalData[2];
if (i == 0) {
ItemStack close = new ItemStack(Items.TNT);
close.setCustomName(new LiteralText("Back").setStyle(Style.EMPTY.withFormatting(Formatting.DARK_RED)));
inv.setStack(i, close);
} else if (page == 1 && i == 47) {
ItemStack close = new ItemStack(Items.ARROW);
close.setCustomName(new LiteralText("Prev").setStyle(Style.EMPTY.withFormatting(Formatting.WHITE)));
inv.setStack(i, close);
} else if (page == 0 && i == 51) {
ItemStack close = new ItemStack(Items.ARROW);
close.setCustomName(new LiteralText("Next").setStyle(Style.EMPTY.withFormatting(Formatting.WHITE)));
inv.setStack(i, close);
} else if (i < 9 || i > 44 || i % 9 == 0 || i % 9 == 8)
inv.setStack(i, ServerScreenHelper.emptyFiller());
else {
int row = i / 9 - 1;
int id = (i % 9) + row * 7 - 1 + page * 54;
if (id < EnumPermission.values().length)
inv.setStack(i, ServerScreenHelper.fromPermission((Claim) additionalData[0], EnumPermission.values()[id], String.valueOf(additionalData[1])));
}
}
}
@Override
protected boolean handleSlotClicked(ServerPlayerEntity player, int index, Slot slot, int clickType) {
if (index == 0) {
if (this.group == null) {
player.closeHandledScreen();
player.getServer().execute(() -> ClaimMenuScreenHandler.openClaimMenu(player, this.claim));
} else {
player.closeHandledScreen();
player.getServer().execute(() -> GroupScreenHandler.openGroupMenu(player, this.claim));
}
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
return true;
}
if (index == 47) {
player.closeHandledScreen();
player.getServer().execute(() -> PermissionScreenHandler.openClaimMenu(player, this.claim, this.group, 0));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
}
if (index == 51) {
player.closeHandledScreen();
player.getServer().execute(() -> PermissionScreenHandler.openClaimMenu(player, this.claim, this.group, 1));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
}
ItemStack stack = slot.getStack();
String name = stack.getName().asString();
EnumPermission perm;
try {
perm = EnumPermission.valueOf(name);
} catch (IllegalArgumentException e) {
return false;
}
if (this.group == null)
this.claim.editGlobalPerms(perm);
else
this.claim.editPerms(player, this.group, perm, this.claim.groupHasPerm(this.group, perm) + 1);
slot.setStack(ServerScreenHelper.fromPermission(this.claim, perm, this.group));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.BLOCK_NOTE_BLOCK_PLING, 1, 1.2f);
return true;
}
@Override
protected boolean isRightSlot(int slot) {
return slot == 0 || (this.page == 1 && slot == 47) || (this.page == 0 && slot == 51) || (slot < 45 && slot > 8 && slot % 9 != 0 && slot % 9 != 8);
}
}