/*
* This file is part of Skript.
*
* Skript is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Skript is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Skript. If not, see <http://www.gnu.org/licenses/>.
*
*
* Copyright 2011, 2012 Peter Güttinger
*
*/
package ch.njol.skript.lang;
import java.util.Locale;
import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;
import ch.njol.skript.SkriptAPIException;
public final class SkriptEventInfo<E extends SkriptEvent> extends SyntaxElementInfo<E> {
public Class<? extends Event>[] events;
public final String name;
private final String id;
@Nullable
private String[] description;
@Nullable
private String[] examples;
@Nullable
private String since;
/**
* @param name Capitalised name of the event without leading "On" which is added automatically (Start the name with an asterisk to prevent this).
* @param patterns
* @param c The SkriptEvent's class
* @param events The Bukkit-Events this SkriptEvent listens to
*/
public SkriptEventInfo(String name, final String[] patterns, final Class<E> c, final Class<? extends Event>[] events) {
super(patterns, c);
assert name != null;
assert patterns != null && patterns.length > 0;
assert c != null;
assert events != null && events.length > 0;
for (int i = 0; i < events.length; i++) {
for (int j = i + 1; j < events.length; j++) {
if (events[i].isAssignableFrom(events[j]) || events[j].isAssignableFrom(events[i]))
throw new SkriptAPIException("The event " + name + " (" + c.getName() + ") registers with super/subclasses " + events[i].getName() + " and " + events[j].getName());
}
}
this.events = events;
if (name.startsWith("*")) {
this.name = name = "" + name.substring(1);
} else {
this.name = "On " + name;
}
// uses the name without 'on ' or '*'
this.id = "" + name.toLowerCase(Locale.ENGLISH).replaceAll("[#'\"<>/&]", "").replaceAll("\\s+", "_");
}
/**
* Use this as {@link #description(String...)} to prevent warnings about missing documentation.
*/
public final static String[] NO_DOC = new String[0];
/**
* Only used for Skript's documentation.
*
* @param description
* @return This SkriptEventInfo object
*/
public SkriptEventInfo<E> description(final String... description) {
assert this.description == null;
this.description = description;
return this;
}
/**
* Only used for Skript's documentation.
*
* @param examples
* @return This SkriptEventInfo object
*/
public SkriptEventInfo<E> examples(final String... examples) {
assert this.examples == null;
this.examples = examples;
return this;
}
/**
* Only used for Skript's documentation.
*
* @param since
* @return This SkriptEventInfo object
*/
public SkriptEventInfo<E> since(final String since) {
assert this.since == null;
this.since = since;
return this;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
@Nullable
public String[] getDescription() {
return description;
}
@Nullable
public String[] getExamples() {
return examples;
}
@Nullable
public String getSince() {
return since;
}
}