* Added screen handler value * Added screen handler constructor and function to show to player * Made inventory_* functions work with screen handlers * Event callbacks and some refactoring * Exception if screen has no inventory * Fixed NPE * Close screen when null * Added screen_property * UNKNOWN_SCREEN throwable * Fix error when not specifying click callback * Access to non-container screen handler slots via the inventory_* functions * Change lectern page * Added button event * Added 'close' event and refactoring callback * Beacon and Brewing screens * Cartography table screen * Crafting screen * Enchantment screen * Grindstone * Loom * Merchant * Shulkerbox * Smithing table * Stonecutter * Use strings as screen type instead of ScreenHandlerType * Remove support for multiple players * Combining create_screen and open_screen and refactoring * Allow modifying cursor stack * Cleanup * Docs * Added multiple screen examples * Rename to screen * Added smoker and blast furnace * Serialize screen content * Store host name instead of context * Add button value special cases to docs * Spelling and grammar fixes by @James103 * Optimize screen inventory access * Use -1 for slot click outside the screen * As boolean, ScreenValue equals isOpen * Revert "Use -1 for slot click outside the screen" This reverts commit 68c113e71bb653191cedf4cc356ab7705838dc25. * Rework of callback function * Improve screen functionality with drop_item * Editor keywords * Only check syncId * slot_update event callback * Screem typo * Mistake * toTag returns "null" NBT for closed screen * Use null for slot index of -999 Co-authored-by: replaceitem <replaceitem.mc@gmail.com>
92 lines
4.0 KiB
Java
92 lines
4.0 KiB
Java
package carpet.script.exception;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* This class contains default Scarpet catchable types, as well as their inheritance and
|
|
* methods to check whether filters are compatible with those.
|
|
*/
|
|
public class Throwables {
|
|
private final String id;
|
|
private final Throwables parent;
|
|
|
|
private static final Map<String, Throwables> byId = new HashMap<>();
|
|
|
|
public static final Throwables THROWN_EXCEPTION_TYPE = register("exception", null);
|
|
public static final Throwables VALUE_EXCEPTION = register("value_exception", THROWN_EXCEPTION_TYPE);
|
|
public static final Throwables UNKNOWN_ITEM = register("unknown_item", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_BLOCK = register("unknown_block", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_BIOME = register("unknown_biome", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_SOUND = register("unknown_sound", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_PARTICLE = register("unknown_particle", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_POI = register("unknown_poi", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_DIMENSION = register("unknown_dimension", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_STRUCTURE = register("unknown_structure", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_CRITERION = register("unknown_criterion", VALUE_EXCEPTION);
|
|
public static final Throwables UNKNOWN_SCREEN = register("unknown_screen", VALUE_EXCEPTION);
|
|
public static final Throwables IO_EXCEPTION = register("io_exception", THROWN_EXCEPTION_TYPE);
|
|
public static final Throwables NBT_ERROR = register("nbt_error", IO_EXCEPTION);
|
|
public static final Throwables JSON_ERROR = register("json_error", IO_EXCEPTION);
|
|
public static final Throwables B64_ERROR = register("b64_error", IO_EXCEPTION);
|
|
public static final Throwables USER_DEFINED = register("user_exception", THROWN_EXCEPTION_TYPE);
|
|
|
|
/**
|
|
* Creates an exception and registers it to be used as parent for
|
|
* user defined exceptions in Scarpet's throw function.
|
|
* <p>Scarpet exceptions should have a top-level parent being {@link Throwables#THROWN_EXCEPTION_TYPE}
|
|
* @param id The value for the exception as a {@link String}.
|
|
* @param parent The parent of the exception being created, or <code>null</code> if top-level
|
|
* @return The created exception
|
|
*/
|
|
public static Throwables register(String id, Throwables parent)
|
|
{
|
|
Throwables exc = new Throwables(id, parent);
|
|
byId.put(id, exc);
|
|
return exc;
|
|
}
|
|
|
|
/**
|
|
* Creates a new exception.
|
|
* <p>Not suitable for creating exceptions that can't be caught.
|
|
* Use an {@link InternalExpressionException} for that
|
|
* @param id The exception's value as a {@link String}
|
|
*/
|
|
public Throwables(String id, Throwables parent)
|
|
{
|
|
this.id = id;
|
|
this.parent = parent;
|
|
}
|
|
|
|
public static Throwables getTypeForException(String type)
|
|
{
|
|
Throwables properType = byId.get(type);
|
|
if (properType == null) throw new InternalExpressionException("Unknown exception type: "+type);
|
|
return properType;
|
|
}
|
|
|
|
/**
|
|
* Checks whether the given filter matches an instance of this exception, by checking equality
|
|
* with itself and possible parents.
|
|
* @param filter The type to check against
|
|
* @return Whether or not the given value matches this exception's hierarchy
|
|
*/
|
|
public boolean isRelevantFor(String filter)
|
|
{
|
|
return (id.equals(filter) || (parent != null && parent.isRelevantFor(filter)));
|
|
}
|
|
|
|
public boolean isUserException()
|
|
{
|
|
return this == USER_DEFINED || parent == USER_DEFINED;
|
|
}
|
|
|
|
/**
|
|
* Returns the throwable type
|
|
* @return The type of this exception
|
|
*/
|
|
public String getId() {
|
|
return id;
|
|
}
|
|
}
|