enter and leave messages close #95
This commit is contained in:
parent
2c4d99e79f
commit
e1a9ef08dc
@ -17,6 +17,7 @@ import io.github.flemmli97.flan.player.LogoutTracker;
|
||||
import io.github.flemmli97.flan.player.PlayerClaimData;
|
||||
import net.minecraft.entity.effect.StatusEffect;
|
||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||
import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
@ -68,6 +69,8 @@ public class Claim implements IPermissionContainer {
|
||||
|
||||
private final Map<StatusEffect, Integer> potions = new HashMap<>();
|
||||
|
||||
public Text enterTitle, enterSubtitle, leaveTitle, leaveSubtitle;
|
||||
|
||||
private Claim(ServerWorld world) {
|
||||
this.world = world;
|
||||
}
|
||||
@ -516,6 +519,34 @@ public class Claim implements IPermissionContainer {
|
||||
return this.homePos;
|
||||
}
|
||||
|
||||
public void setEnterTitle(Text title, Text sub) {
|
||||
this.enterTitle = title;
|
||||
this.enterSubtitle = sub;
|
||||
this.setDirty(true);
|
||||
}
|
||||
|
||||
public void setLeaveTitle(Text title, Text sub) {
|
||||
this.leaveTitle = title;
|
||||
this.leaveSubtitle = sub;
|
||||
this.setDirty(true);
|
||||
}
|
||||
|
||||
public void displayEnterTitle(ServerPlayerEntity player) {
|
||||
if (this.enterTitle != null) {
|
||||
player.networkHandler.sendPacket(new TitleS2CPacket(TitleS2CPacket.Action.TITLE, this.enterTitle));
|
||||
if (this.enterSubtitle != null)
|
||||
player.networkHandler.sendPacket(new TitleS2CPacket(TitleS2CPacket.Action.SUBTITLE, this.enterSubtitle));
|
||||
}
|
||||
}
|
||||
|
||||
public void displayLeaveTitle(ServerPlayerEntity player) {
|
||||
if (this.leaveTitle != null) {
|
||||
player.networkHandler.sendPacket(new TitleS2CPacket(TitleS2CPacket.Action.TITLE, this.leaveTitle));
|
||||
if (this.leaveSubtitle != null)
|
||||
player.networkHandler.sendPacket(new TitleS2CPacket(TitleS2CPacket.Action.SUBTITLE, this.leaveSubtitle));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Only marks non sub claims
|
||||
*/
|
||||
|
@ -27,11 +27,15 @@ import io.github.flemmli97.flan.player.PlayerClaimData;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.command.argument.BlockPosArgumentType;
|
||||
import net.minecraft.command.argument.GameProfileArgumentType;
|
||||
import net.minecraft.command.argument.TextArgumentType;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.command.CommandManager;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.text.LiteralText;
|
||||
import net.minecraft.text.MutableText;
|
||||
import net.minecraft.text.Style;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@ -80,6 +84,10 @@ public class CommandClaim {
|
||||
.then(CommandManager.argument("amount", IntegerArgumentType.integer()).executes(CommandCurrency::buyClaimBlocks)))
|
||||
.then(CommandManager.literal("sellBlocks").requires(src -> PermissionNodeHandler.perm(src, PermissionNodeHandler.cmdSell, false))
|
||||
.then(CommandManager.argument("amount", IntegerArgumentType.integer()).executes(CommandCurrency::sellClaimBlocks)))
|
||||
.then(CommandManager.literal("claimMessage").then(CommandManager.argument("type", StringArgumentType.word()).suggests((ctx, b) -> CommandSource.suggestMatching(new String[]{"enter", "leave"}, b))
|
||||
.then(CommandManager.argument("title", StringArgumentType.word()).suggests((ctx, b) -> CommandSource.suggestMatching(new String[]{"title", "subtitle"}, b))
|
||||
.then(CommandManager.literal("text").then(CommandManager.argument("component", TextArgumentType.text()).executes(ctx -> CommandClaim.editClaimMessages(ctx, TextArgumentType.getTextArgument(ctx, "component")))))
|
||||
.then(CommandManager.literal("string").then(CommandManager.argument("message", StringArgumentType.string()).executes(CommandClaim::editClaimMessages))))))
|
||||
.then(CommandManager.literal("group").requires(src -> PermissionNodeHandler.perm(src, PermissionNodeHandler.cmdGroup))
|
||||
.then(CommandManager.literal("add").then(CommandManager.argument("group", StringArgumentType.string()).executes(CommandClaim::addGroup)))
|
||||
.then(CommandManager.literal("remove").then(CommandManager.argument("group", StringArgumentType.string())
|
||||
@ -744,4 +752,50 @@ public class CommandClaim {
|
||||
return 0;
|
||||
}).orElse(0);
|
||||
}
|
||||
|
||||
public static int editClaimMessages(CommandContext<ServerCommandSource> context) throws CommandSyntaxException {
|
||||
return editClaimMessages(context, new LiteralText(StringArgumentType.getString(context, "message")));
|
||||
}
|
||||
|
||||
public static int editClaimMessages(CommandContext<ServerCommandSource> context, Text text) throws CommandSyntaxException {
|
||||
if (text instanceof MutableText) {
|
||||
Style style = text.getStyle();
|
||||
if (style.isEmpty())
|
||||
style = style.withFormatting(Formatting.WHITE);
|
||||
if (!style.isItalic())
|
||||
style = style.withItalic(false);
|
||||
((MutableText) text).setStyle(style);
|
||||
}
|
||||
ServerPlayerEntity player = context.getSource().getPlayer();
|
||||
Claim claim = PermHelper.checkReturn(player, PermissionRegistry.EDITPERMS, PermHelper.genericNoPermMessage(player));
|
||||
if (claim == null)
|
||||
return 0;
|
||||
boolean sub = StringArgumentType.getString(context, "title").equals("subtitle");
|
||||
boolean enter = StringArgumentType.getString(context, "type").equals("enter");
|
||||
String feedback;
|
||||
if (enter) {
|
||||
if (sub) {
|
||||
claim.setEnterTitle(claim.enterTitle, text);
|
||||
feedback = ConfigHandler.lang.setEnterSubMessage;
|
||||
} else {
|
||||
claim.setEnterTitle(text, claim.enterSubtitle);
|
||||
feedback = ConfigHandler.lang.setEnterMessage;
|
||||
}
|
||||
} else {
|
||||
if (sub) {
|
||||
claim.setLeaveTitle(claim.leaveTitle, text);
|
||||
feedback = ConfigHandler.lang.setLeaveSubMessage;
|
||||
} else {
|
||||
claim.setLeaveTitle(text, claim.leaveSubtitle);
|
||||
feedback = ConfigHandler.lang.setLeaveMessage;
|
||||
}
|
||||
}
|
||||
String[] unf = feedback.split("%s", 2);
|
||||
MutableText cmdFeed = new LiteralText(unf[0]).formatted(Formatting.GOLD)
|
||||
.append(text);
|
||||
if (unf.length > 1)
|
||||
cmdFeed.append(new LiteralText(unf[1])).formatted(Formatting.GOLD);
|
||||
context.getSource().sendFeedback(cmdFeed, false);
|
||||
return Command.SINGLE_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
@ -106,6 +106,7 @@ public class LangConfig {
|
||||
public String screenMenuGlobal = "Edit Global Permissions";
|
||||
public String screenMenuGroup = "Edit Permissiongroups";
|
||||
public String screenMenuPotion = "Edit Potioneffects";
|
||||
public String screenMenuClaimText = "Edit Enter/Leave Text";
|
||||
public String screenMenuDelete = "Delete Claim";
|
||||
public String screenConfirm = "Confirm";
|
||||
public String screenYes = "Yes";
|
||||
@ -116,7 +117,12 @@ public class LangConfig {
|
||||
public String screenGroupPerms = "%s-Permissions";
|
||||
public String screenPersonalGroups = "Personal-Groups";
|
||||
public String screenPersonalPermissions = "Personal Permissions for %s";
|
||||
public String screenEnterText = "Edit title text on enter. (Right-Click to use JSON text. See MC Wiki for that)";
|
||||
public String screenEnterSubText = "Edit subtitle text on enter. (Right-Click to use JSON text. See MC Wiki for that)";
|
||||
public String screenLeaveText = "Edit title text on leave. (Right-Click to use JSON text. See MC Wiki for that)";
|
||||
public String screenLeaveSubText = "Edit subtitle text on enter. (Right-Click to use JSON text. See MC Wiki for that)";
|
||||
|
||||
public String chatClaimTextEdit = "[Click for command]";
|
||||
public String sellDisabled = "Claimblocks selling is disabled";
|
||||
public String buyDisabled = "Claimblocks purchasing is disabled";
|
||||
public String sellFail = "Not enough claimblocks to sell";
|
||||
@ -141,6 +147,11 @@ public class LangConfig {
|
||||
public String teleportHome = "Teleporting to claim home. Don't move for 5 seconds";
|
||||
public String teleportHomeFail = "Teleport already happening";
|
||||
|
||||
public String setEnterMessage = "Set enter title to %s";
|
||||
public String setEnterSubMessage = "Set enter subtitle to %s";
|
||||
public String setLeaveMessage = "Set leave title to %s";
|
||||
public String setLeaveSubMessage = "Set leave subtitle to %s";
|
||||
|
||||
public String wiki = "For more info check out the wiki:";
|
||||
|
||||
public LangCommands cmdLang = new LangCommands();
|
||||
|
@ -316,7 +316,12 @@ public class EntityInteractEvents {
|
||||
ClaimStorage storage = ClaimStorage.get(player.getServerWorld());
|
||||
if (currentClaim != null) {
|
||||
if (!currentClaim.intersects(player.getBoundingBox())) {
|
||||
cons.accept(null);
|
||||
Claim claim = storage.getClaimAt(rounded);
|
||||
cons.accept(claim);
|
||||
if (claim == null)
|
||||
currentClaim.displayLeaveTitle(player);
|
||||
else
|
||||
claim.displayEnterTitle(player);
|
||||
} else {
|
||||
if (!player.isSpectator()) {
|
||||
BlockPos.Mutable bPos = rounded.mutableCopy();
|
||||
@ -337,6 +342,8 @@ public class EntityInteractEvents {
|
||||
} else if (player.age % 3 == 0) {
|
||||
Claim claim = storage.getClaimAt(rounded);
|
||||
cons.accept(claim);
|
||||
if (claim != null)
|
||||
claim.displayEnterTitle(player);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,6 +74,13 @@ public class ClaimMenuScreenHandler extends ServerOnlyScreenHandler<Claim> {
|
||||
ServerScreenHelper.addLore(potions, ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenNoPerm, Formatting.DARK_RED));
|
||||
inv.updateStack(i, potions);
|
||||
break;
|
||||
case 5:
|
||||
ItemStack sign = new ItemStack(Items.OAK_SIGN);
|
||||
sign.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuClaimText, Formatting.GOLD));
|
||||
if (player instanceof ServerPlayerEntity && !this.hasPerm(claim, (ServerPlayerEntity) player, PermissionRegistry.EDITCLAIM))
|
||||
ServerScreenHelper.addLore(sign, ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenNoPerm, Formatting.DARK_RED));
|
||||
inv.updateStack(i, sign);
|
||||
break;
|
||||
case 8:
|
||||
ItemStack delete = new ItemStack(Items.BARRIER);
|
||||
delete.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenMenuDelete, Formatting.RED));
|
||||
@ -89,7 +96,7 @@ public class ClaimMenuScreenHandler extends ServerOnlyScreenHandler<Claim> {
|
||||
|
||||
@Override
|
||||
protected boolean isRightSlot(int slot) {
|
||||
return slot == 0 || slot == 2 || slot == 3 || slot == 4 || slot == 8;
|
||||
return slot == 0 || slot == 2 || slot == 3 || slot == 4 || slot == 5 || slot == 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -123,6 +130,14 @@ public class ClaimMenuScreenHandler extends ServerOnlyScreenHandler<Claim> {
|
||||
} else
|
||||
ServerScreenHelper.playSongToPlayer(player, SoundEvents.ENTITY_VILLAGER_NO, 1, 1f);
|
||||
break;
|
||||
case 5:
|
||||
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITCLAIM)) {
|
||||
player.closeHandledScreen();
|
||||
player.getServer().execute(() -> ClaimTextHandler.openClaimMenu(player, this.claim));
|
||||
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
||||
} else
|
||||
ServerScreenHelper.playSongToPlayer(player, SoundEvents.ENTITY_VILLAGER_NO, 1, 1f);
|
||||
break;
|
||||
case 8:
|
||||
if (this.hasPerm(this.claim, player, PermissionRegistry.EDITCLAIM)) {
|
||||
player.closeHandledScreen();
|
||||
|
@ -0,0 +1,157 @@
|
||||
package io.github.flemmli97.flan.gui;
|
||||
|
||||
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.PermHelper;
|
||||
import io.github.flemmli97.flan.config.ConfigHandler;
|
||||
import io.github.flemmli97.flan.gui.inv.SeparateInv;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.PlayerInventory;
|
||||
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.ClickEvent;
|
||||
import net.minecraft.text.LiteralText;
|
||||
import net.minecraft.text.Style;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class ClaimTextHandler extends ServerOnlyScreenHandler<Claim> {
|
||||
|
||||
private final Claim claim;
|
||||
|
||||
private ClaimTextHandler(int syncId, PlayerInventory playerInventory, Claim claim) {
|
||||
super(syncId, playerInventory, 1, claim);
|
||||
this.claim = claim;
|
||||
}
|
||||
|
||||
public static void openClaimMenu(ServerPlayerEntity player, Claim claim) {
|
||||
NamedScreenHandlerFactory fac = new NamedScreenHandlerFactory() {
|
||||
@Override
|
||||
public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity player) {
|
||||
return new ClaimTextHandler(syncId, inv, claim);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Text getDisplayName() {
|
||||
return PermHelper.simpleColoredText(claim.parentClaim() != null ? ConfigHandler.lang.screenMenuSub : ConfigHandler.lang.screenMenu);
|
||||
}
|
||||
};
|
||||
player.openHandledScreen(fac);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void fillInventoryWith(PlayerEntity player, SeparateInv inv, Claim claim) {
|
||||
for (int i = 0; i < 9; i++) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
ItemStack close = new ItemStack(Items.TNT);
|
||||
close.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenBack, Formatting.DARK_RED));
|
||||
inv.updateStack(i, close);
|
||||
break;
|
||||
case 2:
|
||||
ItemStack stack = new ItemStack(Items.OAK_SIGN);
|
||||
stack.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenEnterText, Formatting.GOLD));
|
||||
if (claim.enterTitle != null)
|
||||
ServerScreenHelper.addLore(stack, claim.enterTitle);
|
||||
inv.updateStack(i, stack);
|
||||
break;
|
||||
case 3:
|
||||
ItemStack stack2 = new ItemStack(Items.OAK_SIGN);
|
||||
stack2.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenEnterSubText, Formatting.GOLD));
|
||||
if (claim.enterSubtitle != null)
|
||||
ServerScreenHelper.addLore(stack2, claim.enterSubtitle);
|
||||
inv.updateStack(i, stack2);
|
||||
break;
|
||||
case 4:
|
||||
ItemStack stack3 = new ItemStack(Items.OAK_SIGN);
|
||||
stack3.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenLeaveText, Formatting.GOLD));
|
||||
if (claim.leaveTitle != null)
|
||||
ServerScreenHelper.addLore(stack3, claim.leaveTitle);
|
||||
inv.updateStack(i, stack3);
|
||||
break;
|
||||
case 5:
|
||||
ItemStack stack4 = new ItemStack(Items.OAK_SIGN);
|
||||
stack4.setCustomName(ServerScreenHelper.coloredGuiText(ConfigHandler.lang.screenLeaveSubText, Formatting.GOLD));
|
||||
if (claim.leaveSubtitle != null)
|
||||
ServerScreenHelper.addLore(stack4, claim.leaveSubtitle);
|
||||
inv.updateStack(i, stack4);
|
||||
break;
|
||||
default:
|
||||
inv.updateStack(i, ServerScreenHelper.emptyFiller());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isRightSlot(int slot) {
|
||||
return slot == 0 || slot == 2 || slot == 3 || slot == 4 || slot == 5 || slot == 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean handleSlotClicked(ServerPlayerEntity player, int index, Slot slot, int clickType) {
|
||||
if (index == 0) {
|
||||
player.closeHandledScreen();
|
||||
player.getServer().execute(() -> ClaimMenuScreenHandler.openClaimMenu(player, this.claim));
|
||||
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
||||
} else {
|
||||
Consumer<Text> cons = null;
|
||||
switch (index) {
|
||||
case 2:
|
||||
cons = text -> this.claim.setEnterTitle(text, this.claim.enterSubtitle);
|
||||
break;
|
||||
case 3:
|
||||
cons = text -> this.claim.setEnterTitle(this.claim.enterTitle, text);
|
||||
break;
|
||||
case 4:
|
||||
cons = text -> this.claim.setLeaveTitle(text, this.claim.leaveSubtitle);
|
||||
break;
|
||||
case 5:
|
||||
cons = text -> this.claim.setLeaveTitle(this.claim.leaveTitle, text);
|
||||
break;
|
||||
}
|
||||
if (cons != null) {
|
||||
player.closeHandledScreen();
|
||||
Consumer<Text> finalCons = cons;
|
||||
if (clickType == 0) {
|
||||
player.getServer().execute(() -> StringResultScreenHandler.createNewStringResult(player, (s) -> {
|
||||
player.closeHandledScreen();
|
||||
finalCons.accept(new LiteralText(s).fillStyle(Style.EMPTY.withItalic(false).withFormatting(Formatting.WHITE)));
|
||||
player.getServer().execute(() -> ClaimTextHandler.openClaimMenu(player, this.claim));
|
||||
ServerScreenHelper.playSongToPlayer(player, SoundEvents.BLOCK_ANVIL_USE, 1, 1f);
|
||||
}, () -> {
|
||||
player.closeHandledScreen();
|
||||
player.getServer().execute(() -> ClaimTextHandler.openClaimMenu(player, this.claim));
|
||||
ServerScreenHelper.playSongToPlayer(player, SoundEvents.ENTITY_VILLAGER_NO, 1, 1f);
|
||||
}));
|
||||
} else {
|
||||
LiteralText text = new LiteralText(ConfigHandler.lang.chatClaimTextEdit);
|
||||
String command = "/flan claimMessage" + (index == 2 || index == 3 ? " enter" : " leave")
|
||||
+ (index == 2 || index == 4 ? " title" : " subtitle") + " text ";
|
||||
text.fillStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command)));
|
||||
player.sendMessage(text, false);
|
||||
}
|
||||
ServerScreenHelper.playSongToPlayer(player, SoundEvents.UI_BUTTON_CLICK, 1, 1f);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean hasEditPerm(Claim claim, ServerPlayerEntity player) {
|
||||
return ((claim.parentClaim() != null && claim.parentClaim().canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos()))
|
||||
|| claim.canInteract(player, PermissionRegistry.EDITPERMS, player.getBlockPos()));
|
||||
}
|
||||
|
||||
private boolean hasPerm(Claim claim, ServerPlayerEntity player, ClaimPermission perm) {
|
||||
if (claim.parentClaim() != null)
|
||||
return claim.parentClaim().canInteract(player, perm, player.getBlockPos());
|
||||
return claim.canInteract(player, perm, player.getBlockPos());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user