Port MusicFlag

This commit is contained in:
Alexander Söderberg 2020-02-13 13:12:41 +01:00
parent 97c1d788b0
commit 8e729f6949
9 changed files with 82 additions and 13 deletions

View File

@ -6,6 +6,7 @@ import com.github.intellectualsites.plotsquared.configuration.file.YamlConfigura
import com.github.intellectualsites.plotsquared.configuration.serialization.ConfigurationSerialization;
import com.github.intellectualsites.plotsquared.plot.commands.WE_Anywhere;
import com.github.intellectualsites.plotsquared.plot.config.Caption;
import com.github.intellectualsites.plotsquared.plot.config.CaptionUtility;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.config.Configuration;
import com.github.intellectualsites.plotsquared.plot.config.Settings;
@ -319,7 +320,7 @@ import java.util.zip.ZipInputStream;
e.printStackTrace();
}
PlotSquared.log(Captions.PREFIX + Captions
PlotSquared.log(Captions.PREFIX + CaptionUtility
.format(Captions.ENABLED.getTranslated(), IMP.getPluginName()));
}

View File

@ -536,6 +536,7 @@ public enum Captions implements Caption {
FLAG_CATEGORY_TELEPORT_DENY("Teleport Deny Flag", "Flags"),
FLAG_CATEGORY_STRING_LIST("String List Flags", "Flags"),
FLAG_CATEGORY_WEATHER("Weather Flags", "Flags"),
FLAG_CATEGORY_MUSIC("Music Flags", "Flags"),
FLAG_CATEGORY_BLOCK_LIST("Material Flags", "Flags"),
FLAG_CATEGORY_INTERVALS("Interval Flags", "Flags"),
FLAG_CATEGORY_INTEGER_LIST("Integer List Flags", "Flags"),
@ -547,6 +548,7 @@ public enum Captions implements Caption {
//</editor-fold>
//<editor-fold desc="Flag descriptions">
FLAG_DESCRIPTION_EXPLOSION("Set to 'true' to enable explosions in the plot, and 'false' to disable them", "Flags"),
FLAG_DESCRIPTION_MUSIC("Set to a music disk ID (item name) to play the music disc inside of the plot", "Flags"),
//</editor-fold>
//<editor-fold desc="Flag category errors">
FLAG_ERROR_BOOLEAN("Flag value must be a boolean (true|false)", "Flags"),
@ -563,6 +565,7 @@ public enum Captions implements Caption {
FLAG_ERROR_STRING("Flag value must be alphanumeric. Some special characters are allowed.", "Flags"),
FLAG_ERROR_STRINGLIST("Flag value must be a string list", "Flags"),
FLAG_ERROR_WEATHER("Flag must be a weather: 'rain' or 'sun'", "Flags"),
FLAG_ERROR_MUSIC("Flag value must be a valid music disc ID.", "Flags"),
//</editor-fold>
//<editor-fold desc="Trusted">
TRUSTED_ADDED("$4You successfully trusted a user to the plot", "Trusted"),

View File

@ -13,7 +13,6 @@ import java.util.HashMap;
public final class Flags {
public static final StringFlag MUSIC = new StringFlag("music");
public static final StringFlag DESCRIPTION = new StringFlag("description");
public static final IntegerListFlag ANALYSIS =
(IntegerListFlag) new IntegerListFlag("analysis").reserve();

View File

@ -1,6 +1,7 @@
package com.github.intellectualsites.plotsquared.plot.flags;
import com.github.intellectualsites.plotsquared.plot.flags.implementations.ExplosionFlag;
import com.github.intellectualsites.plotsquared.plot.flags.implementations.MusicFlag;
import lombok.Getter;
import javax.annotation.Nonnull;
@ -38,6 +39,7 @@ public final class GlobalFlagContainer extends FlagContainer {
super(null);
// Register all default flags here
this.addFlag(ExplosionFlag.EXPLOSION_FALSE);
this.addFlag(MusicFlag.MUSIC_FLAG_NONE);
}
@Override public void addFlag(PlotFlag<?, ?> flag) {

View File

@ -5,6 +5,7 @@ import com.github.intellectualsites.plotsquared.plot.flags.types.BooleanFlag;
import org.jetbrains.annotations.NotNull;
public class ExplosionFlag extends BooleanFlag<ExplosionFlag> {
public static final ExplosionFlag EXPLOSION_TRUE = new ExplosionFlag(true);
public static final ExplosionFlag EXPLOSION_FALSE = new ExplosionFlag(false);

View File

@ -0,0 +1,59 @@
package com.github.intellectualsites.plotsquared.plot.flags.implementations;
import com.github.intellectualsites.plotsquared.plot.config.Captions;
import com.github.intellectualsites.plotsquared.plot.flags.FlagParseException;
import com.github.intellectualsites.plotsquared.plot.flags.PlotFlag;
import com.github.intellectualsites.plotsquared.plot.util.world.ItemUtil;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;
import org.jetbrains.annotations.NotNull;
public final class MusicFlag extends PlotFlag<ItemType, MusicFlag> {
public static final MusicFlag MUSIC_FLAG_NONE = new MusicFlag(ItemTypes.AIR);
/**
* Construct a new flag instance.
*
* @param value Flag value
*/
protected MusicFlag(ItemType value) {
super(value, Captions.FLAG_CATEGORY_MUSIC, Captions.FLAG_DESCRIPTION_MUSIC);
}
@Override public MusicFlag parse(@NotNull String input) throws FlagParseException {
if (!input.isEmpty() && !input.contains("music_disc_")) {
input = "music_disc_" + input;
}
final ItemType itemType = ItemUtil.get(input);
if (itemType == ItemTypes.AIR || itemType.getId().contains("music_disc_")) {
return new MusicFlag(ItemUtil.get(input));
} else {
throw new FlagParseException(this, input, Captions.FLAG_ERROR_MUSIC);
}
}
@Override public MusicFlag merge(@NotNull ItemType newValue) {
if (getValue().equals(ItemTypes.AIR)) {
return new MusicFlag(newValue);
} else if (newValue.equals(ItemTypes.AIR)) {
return this;
} else {
return new MusicFlag(newValue);
}
}
@Override public String toString() {
return getValue().getId();
}
@Override public String getExample() {
return "ward";
}
@Override protected MusicFlag flagOf(@NotNull ItemType value) {
return new MusicFlag(value);
}
}

View File

@ -5,6 +5,7 @@ import com.github.intellectualsites.plotsquared.plot.config.Settings;
import com.github.intellectualsites.plotsquared.plot.flag.Flag;
import com.github.intellectualsites.plotsquared.plot.flag.FlagManager;
import com.github.intellectualsites.plotsquared.plot.flag.Flags;
import com.github.intellectualsites.plotsquared.plot.flags.implementations.MusicFlag;
import com.github.intellectualsites.plotsquared.plot.object.Location;
import com.github.intellectualsites.plotsquared.plot.object.Plot;
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
@ -142,26 +143,26 @@ public class PlotListener {
FlagManager.removePlotFlag(plot, Flags.TIME);
}
}
Optional<PlotWeather> weatherFlag = plot.getFlag(Flags.WEATHER);
weatherFlag.ifPresent(player::setWeather);
Optional<String> musicFlag = plot.getFlag(Flags.MUSIC);
if (musicFlag.isPresent()) {
final String id = musicFlag.get();
final ItemType item = ItemUtil.get(id);
final String rawId = item.getId();
if (rawId.contains("disc") || item == ItemTypes.AIR) {
ItemType musicFlag = plot.getFlag(MusicFlag.class);
if (musicFlag != null) {
final String rawId = musicFlag.getId();
if (rawId.contains("disc") || musicFlag == ItemTypes.AIR) {
Location location = player.getLocation();
Location lastLocation = player.getMeta("music");
if (lastLocation != null) {
player.playMusic(lastLocation, item);
if (item == ItemTypes.AIR) {
player.playMusic(lastLocation, musicFlag);
if (musicFlag == ItemTypes.AIR) {
player.deleteMeta("music");
}
}
if (item != ItemTypes.AIR) {
if (musicFlag != ItemTypes.AIR) {
try {
player.setMeta("music", location);
player.playMusic(location, item);
player.playMusic(location, musicFlag);
} catch (Exception ignored) {
}
}

View File

@ -66,4 +66,5 @@ public class PlotMessage {
public void send(PlotPlayer player) {
ChatManager.manager.send(this, player);
}
}

View File

@ -1,7 +1,6 @@
package com.github.intellectualsites.plotsquared.plot.util.world;
import com.github.intellectualsites.plotsquared.plot.util.MathMan;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.world.registry.LegacyMapper;
@ -12,6 +11,9 @@ public final class ItemUtil {
private ItemUtil(){}
public static ItemType get(String input) {
if (input == null || input.isEmpty()) {
return ItemTypes.AIR;
}
input = input.toLowerCase(Locale.ROOT);
if (Character.isDigit(input.charAt(0))) {
String[] split = input.split(":");