flan/common/src/main/java/io/github/flemmli97/flan/gui/ClaimMenuScreenHandler.java

189 lines
11 KiB
Java
Raw Normal View History

package io.github.flemmli97.flan.gui;
2020-08-23 12:52:36 +00:00
import io.github.flemmli97.flan.api.permission.ClaimPermission;
import io.github.flemmli97.flan.api.permission.PermissionRegistry;
import io.github.flemmli97.flan.claim.Claim;
import io.github.flemmli97.flan.claim.ClaimStorage;
import io.github.flemmli97.flan.claim.PermHelper;
import io.github.flemmli97.flan.config.ConfigHandler;
import io.github.flemmli97.flan.gui.inv.SeparateInv;
import io.github.flemmli97.flan.player.PlayerClaimData;
2021-12-03 21:37:35 +00:00
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
2020-08-23 12:52:36 +00:00
public class ClaimMenuScreenHandler extends ServerOnlyScreenHandler<Claim> {
2020-08-23 12:52:36 +00:00
2020-08-23 13:16:26 +00:00
private final Claim claim;
2020-08-23 12:52:36 +00:00
2021-12-03 21:37:35 +00:00
private ClaimMenuScreenHandler(int syncId, Inventory playerInventory, Claim claim) {
super(syncId, playerInventory, 1, claim);
2020-08-23 12:52:36 +00:00
this.claim = claim;
}
2021-12-03 21:37:35 +00:00
public static void openClaimMenu(ServerPlayer player, Claim claim) {
MenuProvider fac = new MenuProvider() {
2020-08-23 12:52:36 +00:00
@Override
2021-12-03 21:37:35 +00:00
public AbstractContainerMenu createMenu(int syncId, Inventory inv, Player player) {
2020-08-23 12:52:36 +00:00
return new ClaimMenuScreenHandler(syncId, inv, claim);
}
@Override
2021-12-03 21:37:35 +00:00
public Component getDisplayName() {
2022-01-30 17:31:45 +00:00
return PermHelper.simpleColoredText(claim.parentClaim() != null ? ConfigHandler.langManager.get("screenMenuSub") : ConfigHandler.langManager.get("screenMenu"));
2020-08-23 12:52:36 +00:00
}
};
2021-12-03 21:37:35 +00:00
player.openMenu(fac);
2020-08-23 12:52:36 +00:00
}
@Override
2021-12-03 21:37:35 +00:00
protected void fillInventoryWith(Player player, SeparateInv inv, Claim claim) {
2020-08-23 12:52:36 +00:00
for (int i = 0; i < 9; i++) {
switch (i) {
case 0 -> {
2020-08-23 12:52:36 +00:00
ItemStack close = new ItemStack(Items.TNT);
2022-01-30 17:31:45 +00:00
close.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenClose"), ChatFormatting.DARK_RED));
inv.updateStack(i, close);
}
case 2 -> {
2020-08-23 12:52:36 +00:00
ItemStack perm = new ItemStack(Items.BEACON);
2022-01-30 17:31:45 +00:00
perm.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenMenuGlobal"), ChatFormatting.GOLD));
2021-12-03 21:37:35 +00:00
if (player instanceof ServerPlayer && !this.hasEditPerm(claim, (ServerPlayer) player))
2022-01-30 17:31:45 +00:00
ServerScreenHelper.addLore(perm, ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenNoPerm"), ChatFormatting.DARK_RED));
inv.updateStack(i, perm);
}
case 3 -> {
2020-08-23 12:52:36 +00:00
ItemStack group = new ItemStack(Items.WRITABLE_BOOK);
2022-01-30 17:31:45 +00:00
group.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenMenuGroup"), ChatFormatting.GOLD));
2021-12-03 21:37:35 +00:00
if (player instanceof ServerPlayer && !this.hasEditPerm(claim, (ServerPlayer) player))
2022-01-30 17:31:45 +00:00
ServerScreenHelper.addLore(group, ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenNoPerm"), ChatFormatting.DARK_RED));
inv.updateStack(i, group);
}
case 4 -> {
2021-06-12 23:49:10 +00:00
ItemStack potions = new ItemStack(Items.POTION);
2022-01-30 17:31:45 +00:00
potions.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenMenuPotion"), ChatFormatting.GOLD));
2021-12-03 21:37:35 +00:00
if (player instanceof ServerPlayer && !this.hasPerm(claim, (ServerPlayer) player, PermissionRegistry.EDITPOTIONS))
2022-01-30 17:31:45 +00:00
ServerScreenHelper.addLore(potions, ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenNoPerm"), ChatFormatting.DARK_RED));
inv.updateStack(i, potions);
}
case 5 -> {
2021-09-14 15:26:41 +00:00
ItemStack sign = new ItemStack(Items.OAK_SIGN);
2022-01-30 17:31:45 +00:00
sign.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenMenuClaimText"), ChatFormatting.GOLD));
2021-12-03 21:37:35 +00:00
if (player instanceof ServerPlayer && !this.hasPerm(claim, (ServerPlayer) player, PermissionRegistry.EDITCLAIM))
2022-01-30 17:31:45 +00:00
ServerScreenHelper.addLore(sign, ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenNoPerm"), ChatFormatting.DARK_RED));
2021-09-14 15:26:41 +00:00
inv.updateStack(i, sign);
}
2023-03-11 17:17:18 +00:00
case 6 -> {
ItemStack head = new ItemStack(Items.ZOMBIE_HEAD);
head.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenMenuFakePlayers"), ChatFormatting.GOLD));
if (player instanceof ServerPlayer && !this.hasPerm(claim, (ServerPlayer) player, PermissionRegistry.EDITPERMS))
ServerScreenHelper.addLore(head, ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenNoPerm"), ChatFormatting.DARK_RED));
inv.updateStack(i, head);
}
case 8 -> {
2020-08-23 12:52:36 +00:00
ItemStack delete = new ItemStack(Items.BARRIER);
2022-01-30 17:31:45 +00:00
delete.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenMenuDelete"), ChatFormatting.RED));
2021-12-03 21:37:35 +00:00
if (player instanceof ServerPlayer && !this.hasPerm(claim, (ServerPlayer) player, PermissionRegistry.EDITCLAIM))
2022-01-30 17:31:45 +00:00
ServerScreenHelper.addLore(delete, ServerScreenHelper.coloredGuiText(ConfigHandler.langManager.get("screenNoPerm"), ChatFormatting.DARK_RED));
inv.updateStack(i, delete);
}
default -> inv.updateStack(i, ServerScreenHelper.emptyFiller());
2020-08-23 12:52:36 +00:00
}
}
}
@Override
protected boolean isRightSlot(int slot) {
2023-03-11 17:17:18 +00:00
return slot == 0 || slot == 2 || slot == 3 || slot == 4 || slot == 5 || slot == 6 || slot == 8;
2020-08-23 12:52:36 +00:00
}
@Override
2021-12-03 21:37:35 +00:00
protected boolean handleSlotClicked(ServerPlayer player, int index, Slot slot, int clickType) {
2020-08-23 12:52:36 +00:00
switch (index) {
case 0:
2021-12-03 21:37:35 +00:00
player.closeContainer();
2020-08-23 12:52:36 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
break;
case 2:
if (this.hasEditPerm(this.claim, player)) {
2021-12-03 21:37:35 +00:00
player.closeContainer();
player.getServer().execute(() -> PermissionScreenHandler.openClaimMenu(player, this.claim, null));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
} else
2021-12-03 21:37:35 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
2020-08-23 12:52:36 +00:00
break;
case 3:
if (this.hasEditPerm(this.claim, player)) {
2021-12-03 21:37:35 +00:00
player.closeContainer();
player.getServer().execute(() -> GroupScreenHandler.openGroupMenu(player, this.claim));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
} else
2021-12-03 21:37:35 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
2020-08-23 12:52:36 +00:00
break;
2021-06-12 23:49:10 +00:00
case 4:
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITPOTIONS)) {
2021-12-03 21:37:35 +00:00
player.closeContainer();
player.getServer().execute(() -> PotionEditScreenHandler.openPotionMenu(player, this.claim));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
} else
2021-12-03 21:37:35 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
2021-09-14 15:26:41 +00:00
break;
case 5:
if (this.hasPerm(this.claim, player, PermissionRegistry.CLAIMMESSAGE)) {
2021-12-03 21:37:35 +00:00
player.closeContainer();
2021-09-14 15:26:41 +00:00
player.getServer().execute(() -> ClaimTextHandler.openClaimMenu(player, this.claim));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
} else
2021-12-03 21:37:35 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
2023-03-11 17:17:18 +00:00
break;
case 6:
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITPERMS)) {
player.closeContainer();
player.getServer().execute(() -> FakePlayerScreenHandler.open(player, this.claim));
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
} else
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
2021-06-12 23:49:10 +00:00
break;
2020-08-23 12:52:36 +00:00
case 8:
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITCLAIM)) {
2021-12-03 21:37:35 +00:00
player.closeContainer();
player.getServer().execute(() -> ConfirmScreenHandler.openConfirmScreen(player, (bool) -> {
if (bool) {
2023-06-11 19:47:12 +00:00
ClaimStorage storage = ClaimStorage.get(player.serverLevel());
storage.deleteClaim(this.claim, true, PlayerClaimData.get(player).getEditMode(), player.serverLevel());
2021-12-03 21:37:35 +00:00
player.closeContainer();
2022-01-30 17:31:45 +00:00
player.displayClientMessage(PermHelper.simpleColoredText(ConfigHandler.langManager.get("deleteClaim"), ChatFormatting.RED), false);
2021-12-03 21:37:35 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.ANVIL_PLACE, 1, 1f);
} else {
2021-12-03 21:37:35 +00:00
player.closeContainer();
player.getServer().execute(() -> ClaimMenuScreenHandler.openClaimMenu(player, this.claim));
2021-12-03 21:37:35 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
}
}));
} else
2021-12-03 21:37:35 +00:00
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
2020-08-23 12:52:36 +00:00
break;
}
return true;
}
2021-12-03 21:37:35 +00:00
private boolean hasEditPerm(Claim claim, ServerPlayer player) {
return ((claim.parentClaim() != null && claim.parentClaim().canInteract(player, PermissionRegistry.EDITPERMS, player.blockPosition()))
|| claim.canInteract(player, PermissionRegistry.EDITPERMS, player.blockPosition()));
}
2021-12-03 21:37:35 +00:00
private boolean hasPerm(Claim claim, ServerPlayer player, ClaimPermission perm) {
if (claim.parentClaim() != null)
2021-12-03 21:37:35 +00:00
return claim.parentClaim().canInteract(player, perm, player.blockPosition());
return claim.canInteract(player, perm, player.blockPosition());
}
2020-08-23 12:52:36 +00:00
}