2021-06-08 17:03:16 -04:00
|
|
|
package io.github.flemmli97.flan.gui;
|
2020-08-23 08:52:36 -04:00
|
|
|
|
2021-07-20 16:57:34 -04:00
|
|
|
import io.github.flemmli97.flan.api.permission.ClaimPermission;
|
|
|
|
import io.github.flemmli97.flan.api.permission.PermissionRegistry;
|
2021-06-08 17:03:16 -04:00
|
|
|
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;
|
2021-07-02 10:46:25 -04:00
|
|
|
import io.github.flemmli97.flan.gui.inv.SeparateInv;
|
2021-06-08 17:03:16 -04:00
|
|
|
import io.github.flemmli97.flan.player.PlayerClaimData;
|
2021-12-03 16:37:35 -05: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 08:52:36 -04:00
|
|
|
|
2021-06-13 10:03:51 -04:00
|
|
|
public class ClaimMenuScreenHandler extends ServerOnlyScreenHandler<Claim> {
|
2020-08-23 08:52:36 -04:00
|
|
|
|
2020-08-23 09:16:26 -04:00
|
|
|
private final Claim claim;
|
2020-08-23 08:52:36 -04:00
|
|
|
|
2021-12-03 16:37:35 -05:00
|
|
|
private ClaimMenuScreenHandler(int syncId, Inventory playerInventory, Claim claim) {
|
2021-06-13 09:51:22 -04:00
|
|
|
super(syncId, playerInventory, 1, claim);
|
2020-08-23 08:52:36 -04:00
|
|
|
this.claim = claim;
|
|
|
|
}
|
|
|
|
|
2021-12-03 16:37:35 -05:00
|
|
|
public static void openClaimMenu(ServerPlayer player, Claim claim) {
|
|
|
|
MenuProvider fac = new MenuProvider() {
|
2020-08-23 08:52:36 -04:00
|
|
|
@Override
|
2021-12-03 16:37:35 -05:00
|
|
|
public AbstractContainerMenu createMenu(int syncId, Inventory inv, Player player) {
|
2020-08-23 08:52:36 -04:00
|
|
|
return new ClaimMenuScreenHandler(syncId, inv, claim);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-12-03 16:37:35 -05:00
|
|
|
public Component getDisplayName() {
|
2021-05-02 16:00:05 -04:00
|
|
|
return PermHelper.simpleColoredText(claim.parentClaim() != null ? ConfigHandler.lang.screenMenuSub : ConfigHandler.lang.screenMenu);
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|
|
|
|
};
|
2021-12-03 16:37:35 -05:00
|
|
|
player.openMenu(fac);
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-12-03 16:37:35 -05:00
|
|
|
protected void fillInventoryWith(Player player, SeparateInv inv, Claim claim) {
|
2020-08-23 08:52:36 -04:00
|
|
|
for (int i = 0; i < 9; i++) {
|
|
|
|
switch (i) {
|
|
|
|
case 0:
|
|
|
|
ItemStack close = new ItemStack(Items.TNT);
|
2021-12-03 16:37:35 -05:00
|
|
|
close.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenClose, ChatFormatting.DARK_RED));
|
2021-07-02 10:46:25 -04:00
|
|
|
inv.updateStack(i, close);
|
2020-08-23 08:52:36 -04:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
ItemStack perm = new ItemStack(Items.BEACON);
|
2021-12-03 16:37:35 -05:00
|
|
|
perm.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuGlobal, ChatFormatting.GOLD));
|
|
|
|
if (player instanceof ServerPlayer && !this.hasEditPerm(claim, (ServerPlayer) player))
|
|
|
|
ServerScreenHelper.addLore(perm, ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenNoPerm, ChatFormatting.DARK_RED));
|
2021-07-02 10:46:25 -04:00
|
|
|
inv.updateStack(i, perm);
|
2020-08-23 08:52:36 -04:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
ItemStack group = new ItemStack(Items.WRITABLE_BOOK);
|
2021-12-03 16:37:35 -05:00
|
|
|
group.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuGroup, ChatFormatting.GOLD));
|
|
|
|
if (player instanceof ServerPlayer && !this.hasEditPerm(claim, (ServerPlayer) player))
|
|
|
|
ServerScreenHelper.addLore(group, ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenNoPerm, ChatFormatting.DARK_RED));
|
2021-07-02 10:46:25 -04:00
|
|
|
inv.updateStack(i, group);
|
2020-08-23 08:52:36 -04:00
|
|
|
break;
|
2021-06-12 19:49:10 -04:00
|
|
|
case 4:
|
|
|
|
ItemStack potions = new ItemStack(Items.POTION);
|
2021-12-03 16:37:35 -05:00
|
|
|
potions.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuPotion, ChatFormatting.GOLD));
|
|
|
|
if (player instanceof ServerPlayer && !this.hasPerm(claim, (ServerPlayer) player, PermissionRegistry.EDITPOTIONS))
|
|
|
|
ServerScreenHelper.addLore(potions, ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenNoPerm, ChatFormatting.DARK_RED));
|
2021-07-02 10:46:25 -04:00
|
|
|
inv.updateStack(i, potions);
|
2021-06-12 19:49:10 -04:00
|
|
|
break;
|
2021-09-14 11:26:41 -04:00
|
|
|
case 5:
|
|
|
|
ItemStack sign = new ItemStack(Items.OAK_SIGN);
|
2021-12-03 16:37:35 -05:00
|
|
|
sign.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuClaimText, ChatFormatting.GOLD));
|
|
|
|
if (player instanceof ServerPlayer && !this.hasPerm(claim, (ServerPlayer) player, PermissionRegistry.EDITCLAIM))
|
|
|
|
ServerScreenHelper.addLore(sign, ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenNoPerm, ChatFormatting.DARK_RED));
|
2021-09-14 11:26:41 -04:00
|
|
|
inv.updateStack(i, sign);
|
|
|
|
break;
|
2020-08-23 08:52:36 -04:00
|
|
|
case 8:
|
|
|
|
ItemStack delete = new ItemStack(Items.BARRIER);
|
2021-12-03 16:37:35 -05:00
|
|
|
delete.setHoverName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuDelete, ChatFormatting.RED));
|
|
|
|
if (player instanceof ServerPlayer && !this.hasPerm(claim, (ServerPlayer) player, PermissionRegistry.EDITCLAIM))
|
|
|
|
ServerScreenHelper.addLore(delete, ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenNoPerm, ChatFormatting.DARK_RED));
|
2021-07-02 10:46:25 -04:00
|
|
|
inv.updateStack(i, delete);
|
2020-08-23 08:52:36 -04:00
|
|
|
break;
|
|
|
|
default:
|
2021-07-02 10:46:25 -04:00
|
|
|
inv.updateStack(i, ServerScreenHelper.emptyFiller());
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected boolean isRightSlot(int slot) {
|
2021-09-14 11:26:41 -04:00
|
|
|
return slot == 0 || slot == 2 || slot == 3 || slot == 4 || slot == 5 || slot == 8;
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-12-03 16:37:35 -05:00
|
|
|
protected boolean handleSlotClicked(ServerPlayer player, int index, Slot slot, int clickType) {
|
2020-08-23 08:52:36 -04:00
|
|
|
switch (index) {
|
|
|
|
case 0:
|
2021-12-03 16:37:35 -05:00
|
|
|
player.closeContainer();
|
2020-08-23 08:52:36 -04:00
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
|
|
|
break;
|
|
|
|
case 2:
|
2021-06-13 09:51:22 -04:00
|
|
|
if (this.hasEditPerm(this.claim, player)) {
|
2021-12-03 16:37:35 -05:00
|
|
|
player.closeContainer();
|
2021-06-13 09:51:22 -04:00
|
|
|
player.getServer().execute(() -> PermissionScreenHandler.openClaimMenu(player, this.claim, null));
|
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
|
|
|
} else
|
2021-12-03 16:37:35 -05:00
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
|
2020-08-23 08:52:36 -04:00
|
|
|
break;
|
|
|
|
case 3:
|
2021-06-13 09:51:22 -04:00
|
|
|
if (this.hasEditPerm(this.claim, player)) {
|
2021-12-03 16:37:35 -05:00
|
|
|
player.closeContainer();
|
2021-06-13 09:51:22 -04:00
|
|
|
player.getServer().execute(() -> GroupScreenHandler.openGroupMenu(player, this.claim));
|
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
|
|
|
} else
|
2021-12-03 16:37:35 -05:00
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
|
2020-08-23 08:52:36 -04:00
|
|
|
break;
|
2021-06-12 19:49:10 -04:00
|
|
|
case 4:
|
2021-06-13 09:51:22 -04:00
|
|
|
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITPOTIONS)) {
|
2021-12-03 16:37:35 -05:00
|
|
|
player.closeContainer();
|
2021-06-13 09:51:22 -04:00
|
|
|
player.getServer().execute(() -> PotionEditScreenHandler.openPotionMenu(player, this.claim));
|
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
|
|
|
} else
|
2021-12-03 16:37:35 -05:00
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
|
2021-09-14 11:26:41 -04:00
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITCLAIM)) {
|
2021-12-03 16:37:35 -05:00
|
|
|
player.closeContainer();
|
2021-09-14 11:26:41 -04:00
|
|
|
player.getServer().execute(() -> ClaimTextHandler.openClaimMenu(player, this.claim));
|
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
|
|
|
} else
|
2021-12-03 16:37:35 -05:00
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
|
2021-06-12 19:49:10 -04:00
|
|
|
break;
|
2020-08-23 08:52:36 -04:00
|
|
|
case 8:
|
2021-06-13 09:51:22 -04:00
|
|
|
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITCLAIM)) {
|
2021-12-03 16:37:35 -05:00
|
|
|
player.closeContainer();
|
2021-06-13 09:51:22 -04:00
|
|
|
player.getServer().execute(() -> ConfirmScreenHandler.openConfirmScreen(player, (bool) -> {
|
|
|
|
if (bool) {
|
2021-12-03 16:37:35 -05:00
|
|
|
ClaimStorage storage = ClaimStorage.get(player.getLevel());
|
|
|
|
storage.deleteClaim(this.claim, true, PlayerClaimData.get(player).getEditMode(), player.getLevel());
|
|
|
|
player.closeContainer();
|
|
|
|
player.displayClientMessage(PermHelper.simpleColoredText(ConfigHandler.lang.deleteClaim, ChatFormatting.RED), false);
|
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.ANVIL_PLACE, 1, 1f);
|
2021-06-13 09:51:22 -04:00
|
|
|
} else {
|
2021-12-03 16:37:35 -05:00
|
|
|
player.closeContainer();
|
2021-06-13 09:51:22 -04:00
|
|
|
player.getServer().execute(() -> ClaimMenuScreenHandler.openClaimMenu(player, this.claim));
|
2021-12-03 16:37:35 -05:00
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
|
2021-06-13 09:51:22 -04:00
|
|
|
}
|
|
|
|
}));
|
|
|
|
} else
|
2021-12-03 16:37:35 -05:00
|
|
|
ServerScreenHelper.playSongToPlayer(player, SoundEvents.VILLAGER_NO, 1, 1f);
|
2020-08-23 08:52:36 -04:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2021-06-13 09:51:22 -04:00
|
|
|
|
2021-12-03 16:37:35 -05: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-06-13 09:51:22 -04:00
|
|
|
}
|
|
|
|
|
2021-12-03 16:37:35 -05:00
|
|
|
private boolean hasPerm(Claim claim, ServerPlayer player, ClaimPermission perm) {
|
2021-06-13 09:51:22 -04:00
|
|
|
if (claim.parentClaim() != null)
|
2021-12-03 16:37:35 -05:00
|
|
|
return claim.parentClaim().canInteract(player, perm, player.blockPosition());
|
|
|
|
return claim.canInteract(player, perm, player.blockPosition());
|
2021-06-13 09:51:22 -04:00
|
|
|
}
|
2020-08-23 08:52:36 -04:00
|
|
|
}
|