Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FurnaceEvents, Expressions #7093

Open
wants to merge 15 commits into
base: dev/feature
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,18 +120,7 @@
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.hanging.HangingEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.event.inventory.DragType;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryPickupItemEvent;
import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.inventory.*;
import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerBedLeaveEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
Expand Down Expand Up @@ -1935,5 +1924,19 @@ public RegainReason get(EntityRegainHealthEvent event) {
return event.getRegainReason();
}
}, EventValues.TIME_NOW);

// FurnaceExtractEvent
EventValues.registerEventValue(FurnaceExtractEvent.class, Player.class, new Getter<Player, FurnaceExtractEvent>() {
@Override
public @Nullable Player get(FurnaceExtractEvent event) {
return event.getPlayer();
}
}, EventValues.TIME_NOW);
EventValues.registerEventValue(FurnaceExtractEvent.class, ItemStack[].class, new Getter<ItemStack[], FurnaceExtractEvent>() {
@Override
public ItemStack @Nullable [] get(FurnaceExtractEvent event) {
return new ItemStack[]{ItemStack.of(event.getItemType(), event.getItemAmount())};
}
}, EventValues.TIME_NOW);
}
}
99 changes: 99 additions & 0 deletions src/main/java/ch/njol/skript/events/EvtFurnace.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package ch.njol.skript.events;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SkriptEvent;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.registrations.Classes;
import org.bukkit.event.Event;
import org.bukkit.event.inventory.FurnaceBurnEvent;
import org.bukkit.event.inventory.FurnaceExtractEvent;
import org.bukkit.event.inventory.FurnaceSmeltEvent;
import org.bukkit.event.inventory.FurnaceStartSmeltEvent;
import org.jetbrains.annotations.Nullable;

public class EvtFurnace extends SkriptEvent {

static {
Skript.registerEvent("Smelt", EvtFurnace.class, FurnaceSmeltEvent.class, "[furnace] smelt[ed] [of %-itemtypes%]")
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
.description("Called when a furnace smelts an item in its <a href='expressions.html#ExprFurnaceSlot'>ore slot</a>.")
.examples(
"on smelt:",
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
"on smelt of raw iron:",
"\tbroadcast smelted item",
"\tset smelt item to iron block"
)
.since("1.0, INSERT VERSION (Of ItemType)");
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
Skript.registerEvent("Fuel Burn", EvtFurnace.class, FurnaceBurnEvent.class, "[furnace] fuel burn[ing] [of %-itemtypes%]")
.description("Called when a furnace burns an item from its <a href='expressions.html#ExprFurnaceSlot'>fuel slot</a>.")
.examples(
"on fuel burning:",
"\tbroadcast fuel burned",
"\tif fuel burned is coal:",
"\tadd 20 seconds to burn time"
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
)
.since("1.0, INSERT VERSION (Of ItemType)");
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
Skript.registerEvent("Furnace Extract", EvtFurnace.class, FurnaceExtractEvent.class, "furnace extract[ing] [of %-itemtypes%]")
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
.description("Called when a player takes any item out of the furnace.")
.examples(
"on furnace extract:",
"\tif event-items is an iron ingot:",
"\t\tremove event-items from event-player's inventory"
)
.since("INSERT VERSION");
Skript.registerEvent("Start Smelt", EvtFurnace.class, FurnaceStartSmeltEvent.class,
"[furnace] start smelt[ing] [of %-itemtypes%]",
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
"[furnace] smelt[ing] start [of %-itemtypes%]")
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
.description("Called when a furnace starts smelting an item in its ...")
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
.examples(
"on smelting start:",
"\tif the smelting item is raw iron:",
"\t\tset total cook time to 1 second",
"on smelting start of raw iron:"
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
)
.since("INSERT VERSION");
}

private @Nullable Literal<Object> types;

@Override
public boolean init(Literal<?>[] exprs, int matchedPattern, ParseResult parseResult) {
if (exprs[0] != null)
types = (Literal<Object>) exprs[0];
return true;
}

@Override
public boolean check(Event event) {
if (types == null)
return true;

ItemType item;

if (event instanceof FurnaceSmeltEvent smeltEvent) {
item = new ItemType(smeltEvent.getSource());
} else if (event instanceof FurnaceBurnEvent burnEvent) {
item = new ItemType(burnEvent.getFuel());
} else if (event instanceof FurnaceExtractEvent extractEvent) {
item = new ItemType(extractEvent.getItemType());
} else if (event instanceof FurnaceStartSmeltEvent startEvent) {
item = new ItemType(startEvent.getSource());
} else {
assert false;
return false;
}

return types.check(event, o -> {
if (o instanceof ItemType)
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
return ((ItemType) o).isSupertypeOf(item);
return false;
});
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return "smelt/burn/extract/start smelt of " + Classes.toString(types);
}

}
10 changes: 0 additions & 10 deletions src/main/java/ch/njol/skript/events/SimpleEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,6 @@
import org.bukkit.event.entity.SheepRegrowWoolEvent;
import org.bukkit.event.entity.SlimeSplitEvent;
import org.bukkit.event.entity.PiglinBarterEvent;
import org.bukkit.event.inventory.FurnaceBurnEvent;
import org.bukkit.event.inventory.FurnaceSmeltEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryOpenEvent;
Expand Down Expand Up @@ -222,14 +220,6 @@ public class SimpleEvents {
.description("Called when the hunger bar of a player changes, i.e. either increases by eating or decreases over time.")
.examples("on food bar change:")
.since("1.4.4");
Skript.registerEvent("Fuel Burn", SimpleEvent.class, FurnaceBurnEvent.class, "fuel burn[ing]")
.description("Called when a furnace burns an item from its <a href='expressions.html#ExprFurnaceSlot'>fuel slot</a>.")
.examples("on fuel burning:")
.since("1.0");
Skript.registerEvent("Smelt", SimpleEvent.class, FurnaceSmeltEvent.class, "[ore] smelt[ing]", "smelt[ing] of ore") //TODO SkriptEvent for "smelt[ing] of %itemtype%"
.description("Called when a furnace smelts an item in its <a href='expressions.html#ExprFurnaceSlot'>ore slot</a>.")
.examples("on smelt:")
.since("1.0");
Skript.registerEvent("Leaves Decay", SimpleEvent.class, LeavesDecayEvent.class, "leaves decay[ing]")
.description("Called when a leaf block decays due to not being connected to a tree.")
.examples("on leaves decay:")
Expand Down
170 changes: 0 additions & 170 deletions src/main/java/ch/njol/skript/expressions/ExprBurnCookTime.java

This file was deleted.

23 changes: 16 additions & 7 deletions src/main/java/ch/njol/skript/expressions/ExprFireTicks.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.expressions.base.SimplePropertyExpression;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.util.Timespan;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
Expand All @@ -41,21 +44,27 @@ public class ExprFireTicks extends SimplePropertyExpression<Entity, Timespan> {
}

@Override
@Nullable
public Timespan convert(Entity entity) {
return Timespan.fromTicks(Math.max(entity.getFireTicks(), 0));
@SuppressWarnings("unchecked")
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
if (!(exprs[0] instanceof Entity))
return false;
return true;
TheAbsolutionism marked this conversation as resolved.
Show resolved Hide resolved
}

@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
public @Nullable Timespan convert(Entity entity) {
return new Timespan(Timespan.TimePeriod.TICK, Math.max(entity.getFireTicks(), 0));
}

@Override
public Class<?> @Nullable [] acceptChange(ChangeMode mode) {
return (mode != ChangeMode.REMOVE_ALL) ? CollectionUtils.array(Timespan.class) : null;
}

@Override
public void change(Event event, @Nullable Object[] delta, ChangeMode mode) {
Entity[] entities = getExpr().getArray(event);
int change = delta == null ? 0 : (int) ((Timespan) delta[0]).getTicks();
int change = delta == null ? 0 : (int) ((Timespan) delta[0]).getAs(Timespan.TimePeriod.TICK);
switch (mode) {
case REMOVE:
change = -change;
Expand All @@ -75,7 +84,7 @@ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) {
}

@Override
public Class<? extends Timespan> getReturnType() {
public Class<Timespan> getReturnType() {
return Timespan.class;
}

Expand Down
Loading
Loading