Skip to content

Commit

Permalink
Fix broken signs
Browse files Browse the repository at this point in the history
Use modern way to disable plugins
  • Loading branch information
FireInstall committed Mar 1, 2024
1 parent 4f599dc commit 3546a83
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 36 deletions.
47 changes: 30 additions & 17 deletions Minigames/src/main/java/au/com/mineauz/minigames/Events.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,21 @@
import au.com.mineauz.minigames.minigame.modules.WeatherTimeModule;
import au.com.mineauz.minigames.objects.MinigamePlayer;
import au.com.mineauz.minigames.objects.OfflineMinigamePlayer;
import au.com.mineauz.minigames.signs.AMinigameSign;
import au.com.mineauz.minigames.signs.BetSign;
import au.com.mineauz.minigames.signs.JoinSign;
import au.com.mineauz.minigames.signs.SignBase;
import au.com.mineauz.minigames.tool.MinigameTool;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.*;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.block.sign.Side;
Expand Down Expand Up @@ -64,7 +74,7 @@ public void onPlayerResourcePack(@NotNull PlayerResourcePackStatusEvent event) {
if (mgPlayer.isInMinigame()) {
if (required.contains(mgPlayer)) {
ResourcePackModule module = ResourcePackModule.getMinigameModule(mgPlayer.getMinigame());
if (!module.isEnabled()) return;
if (module == null || !module.isEnabled()) return;
if (!module.isForced()) return;
switch (event.getStatus()) {
case ACCEPTED, SUCCESSFULLY_LOADED -> required.remove(mgPlayer);
Expand Down Expand Up @@ -271,13 +281,15 @@ public void playerInteract(@NotNull PlayerInteractEvent event) {

if (event.getAction() == Action.LEFT_CLICK_BLOCK && !(event.useInteractedBlock() == Event.Result.DENY)) {
Block cblock = event.getClickedBlock();
if (cblock.getState() instanceof Sign sign && sign.getSide(Side.FRONT).getLine(0).equalsIgnoreCase(ChatColor.DARK_BLUE + "[Minigame]")) {
if (cblock.getState() instanceof Sign sign && SignBase.isMinigameSign(sign.getSide(Side.FRONT).line(0))) {
// wax signs automatically
sign.setWaxed(true);
sign.update();
if (event.getPlayer().hasPermission("minigame.sign.use.details")) {
if ((sign.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Join") || sign.getLine(1).equalsIgnoreCase(ChatColor.GREEN + "Bet")) && !mgPlayer.isInMinigame()) {
Minigame mgm = mdata.getMinigame(sign.getLine(2));
AMinigameSign mgSign = Minigames.getPlugin().getMinigameSigns().getMgSign(sign.getSide(Side.FRONT).line(1));

if (!mgPlayer.isInMinigame() && (mgSign instanceof BetSign || mgSign instanceof JoinSign)) {
Minigame mgm = AMinigameSign.getMinigame(sign);

if (mgm != null && (!mgm.getUsePermissions() || event.getPlayer().hasPermission("minigame.join." + mgm.getName().toLowerCase()))) {
if (!mgm.isEnabled()) {
Expand Down Expand Up @@ -311,18 +323,17 @@ public void playerInteract(@NotNull PlayerInteractEvent event) {
MinigameUtils.convertTime(Duration.ofSeconds(mgm.getMinigameTimer().getTimeLeft()))));
}

if (mgm.isTeamGame()) {
StringBuilder sc = new StringBuilder();
int c = 0;
for (Team t : TeamsModule.getMinigameModule(mgm).getTeams()) {
c++;
sc.append(t.getColor().getColor().toString()).append(" ").append(t.getScore()).append(ChatColor.WHITE);
if (c != TeamsModule.getMinigameModule(mgm).getTeams().size()) {
sc.append(" : ");
}
TeamsModule teamsModule = TeamsModule.getMinigameModule(mgm);
if (mgm.isTeamGame() && teamsModule != null) {
List<ComponentLike> list = new ArrayList<>(teamsModule.getTeams().size());

for (Team team : teamsModule.getTeams()) {
list.add(Component.text().append(team.getColoredDisplayName()).appendSpace().append(Component.text(team.getScore())));
}

MinigameMessageManager.sendMgMessage(mgPlayer, MinigameMessageType.NONE, MgMiscLangKey.MINIGAME_INFO_SCORE,
Placeholder.unparsed(MinigamePlaceHolderKey.SCORE.getKey(), sc.toString()));
Placeholder.component(MinigamePlaceHolderKey.SCORE.getKey(),
Component.join(JoinConfiguration.separator(Component.text(" : ").color(NamedTextColor.WHITE)), list)));
}

MinigameMessageManager.sendMgMessage(mgPlayer, MinigameMessageType.NONE, MgMiscLangKey.MINIGAME_INFO_PLAYERCOUNT,
Expand Down Expand Up @@ -364,8 +375,10 @@ public void playerInteract(@NotNull PlayerInteractEvent event) {
event.setCancelled(true);
} else if (event.getClickedBlock() != null && (Tag.ALL_SIGNS.isTagged(event.getClickedBlock().getType()))) {
Sign sign = (Sign) event.getClickedBlock().getState();
if (ChatColor.stripColor(sign.getLine(0)).equalsIgnoreCase("[Minigame]") && ChatColor.stripColor(sign.getLine(1)).equalsIgnoreCase("Join")) {
Minigame minigame = mdata.getMinigame(sign.getLine(2));

AMinigameSign mgSign = Minigames.getPlugin().getMinigameSigns().getMgSign(sign.getSide(Side.FRONT).line(1));
Minigame minigame = AMinigameSign.getMinigame(sign);
if (SignBase.isMinigameSign(sign.getSide(Side.FRONT).line(0)) && mgSign instanceof JoinSign && minigame != null) {
tool.setMinigame(minigame);
MinigameMessageManager.sendMgMessage(mgPlayer, MinigameMessageType.INFO, MgMiscLangKey.TOOL_SELECTED_MINIGAME_MSG,
Placeholder.component(MinigamePlaceHolderKey.MINIGAME.getKey(), minigame.getDisplayName()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,16 @@ public abstract class AMinigameSign {

public abstract @NotNull Component getName();

public boolean isType(@NotNull Component signLine) {
public boolean isType(@NotNull Component signLine) { // this would be the correct way for a single sign
PlainTextComponentSerializer plainSerializer = PlainTextComponentSerializer.plainText();

return plainSerializer.serialize(getName()).equalsIgnoreCase(plainSerializer.serialize(signLine));
}

public boolean isType(@NotNull String signLine) { // but this is the best way for multiple since the line needs to get serialized only once
return PlainTextComponentSerializer.plainText().serialize(getName()).equalsIgnoreCase(signLine);
}

public abstract @Nullable String getCreatePermission();

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import au.com.mineauz.minigames.objects.MinigamePlayer;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Sign;
import org.bukkit.block.sign.Side;
Expand All @@ -37,12 +36,12 @@ public String getUsePermission() {
}

@Override
public boolean signCreate(@NotNull SignChangeEvent event) {
public boolean signCreate(@NotNull SignChangeEvent event) { // todo update
Sign sign = (Sign) event.getBlock().getState();
Minigame minigame = getMinigame(sign, event.line(2));

if (minigame != null) {
event.setLine(1, ChatColor.GREEN + "Bet");
event.line(1, getName());
event.line(2, minigame.getDisplayName());
setPersistentMinigame(sign, minigame);

Expand Down Expand Up @@ -99,12 +98,12 @@ public boolean signUse(@NotNull Sign sign, @NotNull MinigamePlayer mgPlayer) {
}

if (!sign.getLine(3).startsWith("$")) {
plugin.getPlayerManager().joinMinigame(mgPlayer, plugin.getMinigameManager().getMinigame(sign.getLine(2)), true, 0.0);
plugin.getPlayerManager().joinMinigame(mgPlayer, mgm, true, 0.0);
} else {
if (plugin.hasEconomy()) {
//todo use plugin.getEconomy().currencyNamePlural()
Double bet = Double.parseDouble(sign.getLine(3).replace("$", ""));
plugin.getPlayerManager().joinMinigame(mgPlayer, plugin.getMinigameManager().getMinigame(sign.getLine(2)), true, bet);
plugin.getPlayerManager().joinMinigame(mgPlayer, mgm, true, bet);
return true;
} else if (plugin.getConfig().getBoolean("warnings")) {
MinigameMessageManager.sendMgMessage(mgPlayer, MinigameMessageType.WARNING, MgMiscLangKey.MINIGAME_WARNING_NOVAULT);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,12 @@ public static void registerMinigameSign(AMinigameSign mgSign) {
minigameSigns.add(mgSign);
}

private @Nullable AMinigameSign getMgSign(@NotNull Component secondLine) {
public @Nullable AMinigameSign getMgSign(@NotNull Component secondLine) {
// don't use a map here, with names as keys since it might be possible to reload messages via command
String strLine = PlainTextComponentSerializer.plainText().serialize(secondLine);

for (AMinigameSign mgSign : minigameSigns) {
if (mgSign.isType(secondLine)) {
if (mgSign.isType(strLine)) {
return mgSign;
}
}
Expand All @@ -77,12 +79,16 @@ private void takeFlag(@NotNull TakeCTFFlagEvent event) {
}
}

public static boolean isMinigameSign(@NotNull Component firstLine) {
String firstLineStr = PlainTextComponentSerializer.plainText().serialize(firstLine);

return (MinigameMessageManager.getStrippedMgMessage(MgSignLangKey.MINIGAME).equalsIgnoreCase(firstLineStr) ||
alternativeMgmPattern.matcher(firstLineStr).matches());
}

@EventHandler(ignoreCancelled = true)
private void signPlace(SignChangeEvent event) {
String firstLine = PlainTextComponentSerializer.plainText().serialize(event.line(0));

if (MinigameMessageManager.getUnformattedMgMessage(MgSignLangKey.MINIGAME).equalsIgnoreCase(firstLine) ||
alternativeMgmPattern.matcher(firstLine).matches()) {
if (isMinigameSign(event.line(0))) {
if (event.getSide() == Side.FRONT) {
AMinigameSign mgSign = getMgSign(event.line(2));

Expand Down Expand Up @@ -119,9 +125,8 @@ private void signUse(PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Block cblock = event.getClickedBlock();
if (cblock != null && cblock.getState() instanceof Sign sign) {
String firstLine = PlainTextComponentSerializer.plainText().serialize(sign.getSide(Side.FRONT).line(0));
AMinigameSign mgSign = getMgSign(sign.getSide(Side.FRONT).line(2));
if (MinigameMessageManager.getUnformattedMgMessage(MgSignLangKey.MINIGAME).equalsIgnoreCase(firstLine) && mgSign != null) {
if (isMinigameSign(sign.getSide(Side.FRONT).line(0)) && mgSign != null) {

if (mgSign.getUsePermission() != null && !event.getPlayer().hasPermission(mgSign.getUsePermission())) {
event.setCancelled(true);
Expand All @@ -141,9 +146,8 @@ private void signUse(PlayerInteractEvent event) {
private void signBreak(BlockBreakEvent event) {
if (Tag.ALL_SIGNS.isTagged(event.getBlock().getType())) {
Sign sign = (Sign) event.getBlock().getState();
String firstLine = PlainTextComponentSerializer.plainText().serialize(sign.getSide(Side.FRONT).line(0));
AMinigameSign mgSign = getMgSign(sign.getSide(Side.FRONT).line(2));
if (MinigameMessageManager.getUnformattedMgMessage(MgSignLangKey.MINIGAME).equalsIgnoreCase(firstLine) && mgSign != null) {
if (isMinigameSign(sign.getSide(Side.FRONT).line(0)) && mgSign != null) {

if (mgSign.getCreatePermission() != null && !event.getPlayer().hasPermission(mgSign.getCreatePermission())) {
event.setCancelled(true);
Expand Down
2 changes: 1 addition & 1 deletion Minigames/src/main/resources/messages.properties
Original file line number Diff line number Diff line change
Expand Up @@ -855,7 +855,7 @@ sign.error.team.invalidFormat=Line 3 must be a color or "neutral"!
sign.finish.requireFlags=You still require the following flags: <text>
sign.flag.broken.support=You broke the support block of a flag! It won't be able to respawn!
sign.join.invalidMoney=Invalid money amount!
sign.minigame=<blue>Minigame</blue>
sign.minigame=[<blue>Minigame</blue>]
sign.reward.error.noName=You need to define a name for the reward on line 3!
sign.reward.saved=Saved rewards for this sign.
sign.score.addScore=Added <number> to your score. New Score: <score>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import au.com.mineauz.minigamesregions.tool.ExecutorHolderEditToolMode;
import au.com.mineauz.minigamesregions.tool.NodeToolMode;
import au.com.mineauz.minigamesregions.tool.RegionToolMode;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

Expand Down Expand Up @@ -56,7 +57,7 @@ public void onEnable() {
getLogger().severe("Minigames plugin not found! You must have the plugin to use Regions!");
plugin = null;
minigames = null;
this.getPluginLoader().disablePlugin(this);
Bukkit.getPluginManager().disablePlugin(this);
return;
}

Expand All @@ -78,7 +79,7 @@ public void onEnable() {
plugin = null;
minigames = null;
Minigames.getCmpnntLogger().error("Failed to enable Minigames Regions " + getDescription().getVersion() + ": ", e);
getPluginLoader().disablePlugin(this);
Bukkit.getPluginManager().disablePlugin(this);
}
}

Expand Down
1 change: 1 addition & 0 deletions minigamesdistribution/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<skipSource>true</skipSource>
</configuration>
Expand Down

0 comments on commit 3546a83

Please sign in to comment.