Skip to content

Commit

Permalink
Merge branch 'dev/feature' into feature/default-comparators
Browse files Browse the repository at this point in the history
  • Loading branch information
Moderocky authored Dec 18, 2024
2 parents e217c4e + a44df2b commit 1266a55
Show file tree
Hide file tree
Showing 142 changed files with 3,319 additions and 1,295 deletions.
2 changes: 1 addition & 1 deletion src/main/java/ch/njol/skript/ScriptLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -969,7 +969,7 @@ public static ArrayList<TriggerItem> loadItems(SectionNode node) {
item = Statement.parse(expr, items, "Can't understand this condition/effect: " + expr);
if (item == null)
continue;
long requiredTime = SkriptConfig.longParseTimeWarningThreshold.value().getMilliSeconds();
long requiredTime = SkriptConfig.longParseTimeWarningThreshold.value().getAs(Timespan.TimePeriod.MILLISECOND);
if (requiredTime > 0) {
long timeTaken = System.currentTimeMillis() - start;
if (timeTaken > requiredTime)
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/ch/njol/skript/Skript.java
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,16 @@ public void onEnable() {
classLoadError = e;
}

// Warn about pausing
if (Skript.methodExists(Server.class, "getPauseWhenEmptyTime")) {
int pauseThreshold = getServer().getPauseWhenEmptyTime();
if (pauseThreshold > -1) {
Skript.warning("Minecraft server pausing is enabled!");
Skript.warning("Scripts that interact with the world or entities may not work as intended when the server is paused and may crash your server.");
Skript.warning("Consider setting 'pause-when-empty-seconds' to -1 in server.properties to make sure you don't encounter any issues.");
}
}

// Config must be loaded after Java and Skript classes are parseable
// ... but also before platform check, because there is a config option to ignore some errors
SkriptConfig.load();
Expand Down
38 changes: 37 additions & 1 deletion src/main/java/ch/njol/skript/SkriptConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import co.aikar.timings.Timings;
import org.bukkit.event.EventPriority;
import org.jetbrains.annotations.Nullable;
import org.skriptlang.skript.util.event.EventRegistry;

import java.io.File;
import java.io.IOException;
Expand All @@ -46,6 +47,37 @@
@SuppressWarnings("unused")
public class SkriptConfig {

//<editor-fold desc="SkriptConfig events">
/**
* Used for listening to events involving Skript's configuration.
* @see #eventRegistry()
*/
public interface Event extends org.skriptlang.skript.util.event.Event { }

/**
* Called when Skript's configuration is successfully reloaded.
* This occurs when the reload process has finished, meaning the config is safe to reference.
*/
@FunctionalInterface
public interface ReloadEvent extends Event {

/**
* The method that is called when this event triggers.
*/
void onReload();

}

private static final EventRegistry<Event> eventRegistry = new EventRegistry<>();

/**
* @return An event registry for the configuration's events.
*/
public static EventRegistry<Event> eventRegistry() {
return eventRegistry;
}
//</editor-fold>

@Nullable
static Config mainConfig;
static Collection<Config> configs = new ArrayList<>();
Expand All @@ -71,7 +103,7 @@ public class SkriptConfig {
.setter(t -> {
SkriptUpdater updater = Skript.getInstance().getUpdater();
if (updater != null)
updater.setCheckFrequency(t.getTicks());
updater.setCheckFrequency(t.getAs(Timespan.TimePeriod.TICK));
});
static final Option<Integer> updaterDownloadTries = new Option<>("updater download tries", 7)
.optional(true);
Expand Down Expand Up @@ -436,6 +468,10 @@ static boolean load() {
Skript.exception(e, "An error occurred while loading the config");
return false;
}

// trigger reload event handlers
eventRegistry().events(ReloadEvent.class).forEach(ReloadEvent::onReload);

return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
*/
public interface SoundReceiver {

boolean ADVENTURE_API = Skript.classExists("net.kyori.adventure.sound.Sound$Builder");
boolean ADVENTURE_API = Skript.classExists("net.kyori.adventure.sound.Sound$Builder") && Skript.methodExists(SoundCategory.class, "soundSource");
boolean SPIGOT_SOUND_SEED = Skript.methodExists(Player.class, "playSound", Entity.class, Sound.class, SoundCategory.class, float.class, float.class, long.class);
boolean ENTITY_EMITTER_SOUND = Skript.methodExists(Player.class, "playSound", Entity.class, Sound.class, SoundCategory.class, float.class, float.class);
boolean ENTITY_EMITTER_STRING = Skript.methodExists(Player.class, "playSound", Entity.class, String.class, SoundCategory.class, float.class, float.class);
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/ch/njol/skript/classes/data/BukkitClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
import org.bukkit.inventory.BlockInventoryHolder;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.Metadatable;
import org.bukkit.potion.PotionEffect;
Expand Down Expand Up @@ -1529,6 +1530,11 @@ public String toVariableNameString(EnchantmentOffer eo) {
.description("Represents a transform reason of an <a href='events.html#entity transform'>entity transform event</a>.")
.since("2.8.0"));

Classes.registerClass(new EnumClassInfo<>(ItemFlag.class, "itemflag", "item flags")
.user("item ?flags?")
.name("Item Flag")
.description("Represents flags that may be applied to hide certain attributes of an item.")
.since("INSERT VERSION"));

Classes.registerClass(new EnumClassInfo<>(EntityPotionEffectEvent.Cause.class, "entitypotioncause", "entity potion causes")
.user("(entity )?potion ?effect ?cause")
Expand Down
25 changes: 24 additions & 1 deletion src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@
import ch.njol.skript.util.EnchantmentType;
import ch.njol.skript.util.Getter;
import ch.njol.skript.util.Timespan;
import ch.njol.skript.util.Color;
import ch.njol.skript.util.SkriptColor;
import ch.njol.skript.util.ColorRGB;
import ch.njol.skript.util.slot.InventorySlot;
import ch.njol.skript.util.slot.Slot;
import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
Expand Down Expand Up @@ -1638,6 +1641,26 @@ public FireworkEffect get(FireworkExplodeEvent e) {
return effects.get(0);
}
}, 0);
EventValues.registerEventValue(FireworkExplodeEvent.class, Color[].class, new Getter<Color[], FireworkExplodeEvent>() {
@Override
public Color @Nullable [] get(FireworkExplodeEvent event) {
List<FireworkEffect> effects = event.getEntity().getFireworkMeta().getEffects();
if (effects.isEmpty())
return null;
List<Color> colors = new ArrayList<>();
for (FireworkEffect fireworkEffect : effects) {
for (org.bukkit.Color color : fireworkEffect.getColors()) {
if (SkriptColor.fromBukkitColor(color) != null)
colors.add(SkriptColor.fromBukkitColor(color));
else
colors.add(ColorRGB.fromBukkitColor(color));
}
}
if (colors.isEmpty())
return null;
return colors.toArray(Color[]::new);
}
}, EventValues.TIME_NOW);
//PlayerRiptideEvent
EventValues.registerEventValue(PlayerRiptideEvent.class, ItemStack.class, new Getter<ItemStack, PlayerRiptideEvent>() {
@Override
Expand Down Expand Up @@ -1779,7 +1802,7 @@ public Egg get(PlayerEggThrowEvent event) {
EventValues.registerEventValue(PlayerStopUsingItemEvent.class, Timespan.class, new Getter<Timespan, PlayerStopUsingItemEvent>() {
@Override
public Timespan get(PlayerStopUsingItemEvent event) {
return Timespan.fromTicks(event.getTicksHeldFor());
return new Timespan(Timespan.TimePeriod.TICK, event.getTicksHeldFor());
}
}, EventValues.TIME_NOW);
EventValues.registerEventValue(PlayerStopUsingItemEvent.class, ItemType.class, new Getter<ItemType, PlayerStopUsingItemEvent>() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ public boolean supportsOrdering() {
Comparators.registerComparator(Timespan.class, Timespan.class, new Comparator<Timespan, Timespan>() {
@Override
public Relation compare(Timespan t1, Timespan t2) {
return Relation.get(t1.getMilliSeconds() - t2.getMilliSeconds());
return Relation.get(t1.getAs(Timespan.TimePeriod.MILLISECOND) - t2.getAs(Timespan.TimePeriod.MILLISECOND));
}

@Override
Expand Down
Loading

0 comments on commit 1266a55

Please sign in to comment.