Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.denizenscript.denizen.events.BukkitScriptEvent;
import com.denizenscript.denizen.objects.ItemTag;
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizen.utilities.BukkitImplDeprecations;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import org.bukkit.event.EventHandler;
Expand Down Expand Up @@ -31,13 +32,32 @@ public class BrewingStandFueledScriptEvent extends BukkitScriptEvent implements
//
// @Determine
// "FUEL_POWER:<ElementTag(Number)>" to set the fuel power level to be added.
// "CONSUMING" to indicate that the fuel item should be consumed.
// "NOT_CONSUMING" to indicate that the fuel item should not be consumed.
// "CONSUMING:<ElementTag(Boolean)>" to indicate whether the fuel item should be consumed.
//
// -->

public BrewingStandFueledScriptEvent() {
registerCouldMatcher("brewing stand fueled (with <item>)");
this.<BrewingStandFueledScriptEvent, ElementTag>registerOptionalDetermination("fuel_power", ElementTag.class, (evt, context, power) -> {
if (power.isInt()) {
evt.event.setFuelPower(power.asInt());
return true;
}
return false;
});
this.<BrewingStandFueledScriptEvent, ElementTag>registerDetermination("consuming", ElementTag.class, (evt, context, value) -> {
if (value.isBoolean()) {
evt.event.setConsuming(value.asBoolean());
}
else {
BukkitImplDeprecations.brewingStandConsumeDetermination.warn();
evt.event.setConsuming(true);
}
});
this.<BrewingStandFueledScriptEvent>registerTextDetermination("not_consuming", (evt) -> {
BukkitImplDeprecations.brewingStandConsumeDetermination.warn();
evt.event.setConsuming(false);
});
}

public LocationTag location;
Expand All @@ -55,35 +75,15 @@ public boolean matches(ScriptPath path) {
return super.matches(path);
}

@Override
public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
if (determinationObj instanceof ElementTag element) {
String val = element.asString();
if (val.startsWith("fuel_power:")) {
event.setFuelPower(Integer.parseInt(val.substring("fuel_power:".length())));
return true;
}
else if (val.equalsIgnoreCase("consuming")) {
event.setConsuming(true);
return true;
}
else if (val.equalsIgnoreCase("not_consuming")) {
event.setConsuming(false);
return true;
}
}
return super.applyDetermination(path, determinationObj);
}

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "location": return location;
case "item": return item;
case "fuel_power": return new ElementTag(event.getFuelPower());
case "consuming": return new ElementTag(event.isConsuming());
}
return super.getContext(name);
return switch (name) {
case "location" -> location;
case "item" -> item;
case "fuel_power" -> new ElementTag(event.getFuelPower());
case "consuming" -> new ElementTag(event.isConsuming());
default -> super.getContext(name);
};
}

@EventHandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
import com.denizenscript.denizen.objects.LocationTag;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import org.bukkit.Material;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.Levelled;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.CauldronLevelChangeEvent;
Expand Down Expand Up @@ -39,10 +42,37 @@ public class CauldronLevelChangeScriptEvent extends BukkitScriptEvent implements
public CauldronLevelChangeScriptEvent() {
registerCouldMatcher("cauldron level changes|raises|lowers");
registerSwitches("cause");
this.<CauldronLevelChangeScriptEvent, ElementTag>registerOptionalDetermination(null, ElementTag.class, (evt, context, value) -> {
if (!value.isInt()) {
return false;
}
int level = value.asInt();
BlockState cauldronState = evt.event.getNewState();
if (level <= 0) {
cauldronState.setType(Material.CAULDRON);
return true;
}
if (level > 3) {
return false;
}
if (cauldronState.getType() != Material.WATER_CAULDRON && cauldronState.getType() != Material.LAVA_CAULDRON) {
cauldronState.setType(cauldronType);
}
if (cauldronState.getBlockData() instanceof Levelled levelled) {
levelled.setLevel(level);
cauldronState.setBlockData(levelled);
evt.newLevel = level;
return true;
}
return false;
});
}

public LocationTag location;
public CauldronLevelChangeEvent event;
public Material cauldronType;
public int oldLevel;
public int newLevel;

@Override
public boolean matches(ScriptPath path) {
Expand All @@ -54,12 +84,12 @@ public boolean matches(ScriptPath path) {
}
String changeType = path.eventArgLowerAt(2);
if (changeType.equals("raises")) {
if (event.getNewLevel() <= event.getOldLevel()) {
if (newLevel <= oldLevel) {
return false;
}
}
else if (changeType.equals("lowers")) {
if (event.getNewLevel() >= event.getOldLevel()) {
if (newLevel >= oldLevel) {
return false;
}
}
Expand All @@ -69,33 +99,24 @@ else if (!changeType.equals("changes")) {
return super.matches(path);
}

@Override
public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
if (determinationObj instanceof ElementTag element && element.isInt()) {
event.setNewLevel(element.asInt());
}
return super.applyDetermination(path, determinationObj);
}

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "location": return location;
case "cause": return new ElementTag(event.getReason());
case "old_level": return new ElementTag(event.getOldLevel());
case "new_level": return new ElementTag(event.getNewLevel());
case "entity":
if (event.getEntity() != null) {
return new EntityTag(event.getEntity()).getDenizenObject();
}
break;
}
return super.getContext(name);
return switch (name) {
case "location" -> location;
case "cause" -> new ElementTag(event.getReason());
case "old_level" -> new ElementTag(oldLevel);
case "new_level" -> new ElementTag(newLevel);
case "entity" -> event.getEntity() != null ? new EntityTag(event.getEntity()).getDenizenObject() : null;
default -> super.getContext(name);
};
}

@EventHandler
public void onCauldronLevelChange(CauldronLevelChangeEvent event) {
location = new LocationTag(event.getBlock().getLocation());
cauldronType = event.getBlock().getType();
oldLevel = event.getBlock().getBlockData() instanceof Levelled levelled ? levelled.getLevel() : 0;
newLevel = event.getNewState().getBlockData() instanceof Levelled levelled ? levelled.getLevel() : 0;
this.event = event;
fire(event);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@ public class FurnaceBurnsItemScriptEvent extends BukkitScriptEvent implements Li

public FurnaceBurnsItemScriptEvent() {
registerCouldMatcher("furnace burns <item>");
this.<FurnaceBurnsItemScriptEvent, ObjectTag>registerOptionalDetermination(null, ObjectTag.class, (evt, context, time) -> {
if (time instanceof ElementTag elementTag && elementTag.isInt()) { // Backwards compatibility for non-duration tick input
evt.event.setBurnTime(elementTag.asInt());
return true;
}
else if (time.canBeType(DurationTag.class)) {
evt.event.setBurnTime(time.asType(DurationTag.class, context).getTicksAsInt());
return true;
}
return false;
});
}

public ItemTag item;
Expand All @@ -52,30 +63,17 @@ public boolean matches(ScriptPath path) {
return super.matches(path);
}

@Override
public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
if (determinationObj instanceof ElementTag element && element.isInt()) {
event.setBurnTime(element.asInt());
return true;
}
else if (determinationObj.canBeType(DurationTag.class)) {
event.setBurnTime(determinationObj.asType(DurationTag.class, getTagContext(path)).getTicksAsInt());
return true;
}
return super.applyDetermination(path, determinationObj);
}

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "location": return location;
case "item": return item;
}
return super.getContext(name);
return switch (name) {
case "location" -> location;
case "item" -> item;
default -> super.getContext(name);
};
}

@EventHandler
public void onBrews(FurnaceBurnEvent event) {
public void onFurnaceBurns(FurnaceBurnEvent event) {
location = new LocationTag(event.getBlock().getLocation());
item = new ItemTag(event.getFuel());
this.event = event;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,13 @@ public class FurnaceStartsSmeltingScriptEvent extends BukkitScriptEvent implemen
// @Determine
// DurationTag to set the total cook time for the item being smelted.
//
// @Example
// # Sets the total cook time of every item to always be 2 seconds.
// on furnace starts smelting item:
// - determine 2s
//
// @Example
// # Sets the total cook time of iron ore to be 2 seconds.
// on furnace starts smelting iron_ore:
// - determine 2s
// -->

public FurnaceStartsSmeltingScriptEvent() {
registerCouldMatcher("furnace starts smelting <item>");
this.<FurnaceStartsSmeltingScriptEvent, DurationTag>registerDetermination(null, DurationTag.class, (evt, context, time) -> {
evt.event.setTotalCookTime(time.getTicksAsInt());
});
}

public ItemTag item;
Expand All @@ -61,24 +55,15 @@ public boolean matches(ScriptPath path) {
return super.matches(path);
}

@Override
public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
if (determinationObj.canBeType(DurationTag.class)) {
event.setTotalCookTime(determinationObj.asType(DurationTag.class, getTagContext(path)).getTicksAsInt());
return true;
}
return super.applyDetermination(path, determinationObj);
}

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "location": return location;
case "item": return item;
case "recipe_id": return new ElementTag(event.getRecipe().getKey().toString());
case "total_cook_time": return new DurationTag((long) event.getTotalCookTime());
}
return super.getContext(name);
return switch (name) {
case "location" -> location;
case "item" -> item;
case "recipe_id" -> new ElementTag(event.getRecipe().getKey().toString(), true);
case "total_cook_time" -> new DurationTag((long) event.getTotalCookTime());
default -> super.getContext(name);
};
}

@EventHandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ public boolean matches(ScriptPath path) {

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "location": return location;
case "material": return material;
}
return super.getContext(name);
return switch (name) {
case "location" -> location;
case "material" -> material;
default -> super.getContext(name);
};
}

@EventHandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ public boolean matches(ScriptPath path) {

@Override
public ObjectTag getContext(String name) {
switch (name) {
case "location": return location;
case "old_material": return old_material;
case "new_material": return new MaterialTag(event.getNewData());
}
return super.getContext(name);
return switch (name) {
case "location" -> location;
case "old_material" -> old_material;
case "new_material" -> new MaterialTag(event.getNewData());
default -> super.getContext(name);
};
}

@EventHandler
Expand Down
Loading