mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-06 07:32:46 +00:00
19
data/plugin/plugin/DisabledPlugin.java
Normal file
19
data/plugin/plugin/DisabledPlugin.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package plugin;
|
||||||
|
|
||||||
|
import java.lang.annotation.Documented;
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marker annotation that is used to mark disabled plugins so they will be
|
||||||
|
* ignored by {@link PluginLoader}
|
||||||
|
*
|
||||||
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
|
*/
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Documented
|
||||||
|
public @interface DisabledPlugin {
|
||||||
|
}
|
||||||
76
data/plugin/plugin/PluginLoader.java
Normal file
76
data/plugin/plugin/PluginLoader.java
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
package plugin;
|
||||||
|
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.l2jserver.model.template.Template;
|
||||||
|
import com.l2jserver.service.game.scripting.classlistener.Loader;
|
||||||
|
import com.l2jserver.service.game.scripting.classlistener.Unloader;
|
||||||
|
import com.l2jserver.util.ClassUtils;
|
||||||
|
import com.l2jserver.util.factory.CollectionFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility class that loads all Plugins in classPath of this script context.<br>
|
||||||
|
* Plugin should be public, not abstract, not interface, must have default
|
||||||
|
* constructor annotated with @Inject.
|
||||||
|
*
|
||||||
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
|
*/
|
||||||
|
public class PluginLoader implements Loader, Unloader {
|
||||||
|
private static final Logger log = LoggerFactory
|
||||||
|
.getLogger(PluginLoader.class);
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public PluginLoader() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void load(Class<?>[] classes) {
|
||||||
|
log.debug("Loading plugins from {} classes", classes.length);
|
||||||
|
for (final Class<? extends Template<?>> template : getSuitableClasses(classes)) {
|
||||||
|
log.debug("Found loadable plugin class: {}", template);
|
||||||
|
//templateService.addTemplate(template);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void unload(Class<?>[] classes) {
|
||||||
|
log.debug("Unloading plugins from {} classes", classes.length);
|
||||||
|
for (final Class<? extends Template<?>> template : getSuitableClasses(classes)) {
|
||||||
|
log.debug("Found unloadable plugin class: {}", template);
|
||||||
|
// TODO unloading
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns list of suitable Template classes to load/unload
|
||||||
|
*
|
||||||
|
* @return list of Template classes to load/unload
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
private static Set<Class<? extends Template<?>>> getSuitableClasses(
|
||||||
|
Class<?>[] classes) {
|
||||||
|
final Set<Class<? extends Template<?>>> suitable = CollectionFactory
|
||||||
|
.newSet(null);
|
||||||
|
for (Class<?> clazz : classes) {
|
||||||
|
if (!ClassUtils.isSubclass(clazz, Template.class))
|
||||||
|
continue;
|
||||||
|
if (Modifier.isAbstract(clazz.getModifiers())
|
||||||
|
|| Modifier.isInterface(clazz.getModifiers()))
|
||||||
|
continue;
|
||||||
|
if (!Modifier.isPublic(clazz.getModifiers()))
|
||||||
|
continue;
|
||||||
|
if (clazz.isAnnotationPresent(DisabledPlugin.class))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
suitable.add((Class<? extends Template<?>>) clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
return suitable;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
<classpathentry kind="src" path="data/script/template"/>
|
<classpathentry kind="src" path="data/script/template"/>
|
||||||
<classpathentry kind="src" path="data/script/quest"/>
|
<classpathentry kind="src" path="data/script/quest"/>
|
||||||
<classpathentry kind="src" path="data/script/ai"/>
|
<classpathentry kind="src" path="data/script/ai"/>
|
||||||
|
<classpathentry kind="src" path=" data/plugin"/>
|
||||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
|
||||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
|
||||||
<classpathentry kind="src" path="src/tool/java"/>
|
<classpathentry kind="src" path="src/tool/java"/>
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Marker annotation that is used to mark disabled DAO's so they will be ignored
|
* Marker annotation that is used to mark disabled templates so they will be
|
||||||
* by {@link TemplateLoader}
|
* ignored by {@link TemplateLoader}
|
||||||
*
|
*
|
||||||
* @author SoulKeeper
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
*/
|
*/
|
||||||
@Target(ElementType.TYPE)
|
@Target(ElementType.TYPE)
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import com.l2jserver.util.factory.CollectionFactory;
|
|||||||
/**
|
/**
|
||||||
* Utility class that loads all Template's in classPath of this script context.<br>
|
* Utility class that loads all Template's in classPath of this script context.<br>
|
||||||
* Template should be public, not abstract, not interface, must have default
|
* Template should be public, not abstract, not interface, must have default
|
||||||
* no-arg public constructor.
|
* constructor annotated with @Inject.
|
||||||
*
|
*
|
||||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,25 +2,46 @@ package com.l2jserver.model.world;
|
|||||||
|
|
||||||
import com.l2jserver.model.id.object.CharacterID;
|
import com.l2jserver.model.id.object.CharacterID;
|
||||||
import com.l2jserver.model.id.template.ItemTemplateID;
|
import com.l2jserver.model.id.template.ItemTemplateID;
|
||||||
|
import com.l2jserver.model.world.capability.Dropable;
|
||||||
import com.l2jserver.model.world.capability.Listenable;
|
import com.l2jserver.model.world.capability.Listenable;
|
||||||
import com.l2jserver.model.world.capability.Playable;
|
import com.l2jserver.model.world.capability.Playable;
|
||||||
import com.l2jserver.model.world.capability.Spawnable;
|
import com.l2jserver.model.world.capability.Spawnable;
|
||||||
|
import com.l2jserver.model.world.character.CharacterInventory.InventoryLocation;
|
||||||
|
import com.l2jserver.model.world.character.CharacterInventory.InventoryPaperdoll;
|
||||||
import com.l2jserver.model.world.item.ItemEvent;
|
import com.l2jserver.model.world.item.ItemEvent;
|
||||||
import com.l2jserver.model.world.item.ItemListener;
|
import com.l2jserver.model.world.item.ItemListener;
|
||||||
import com.l2jserver.util.Coordinate;
|
import com.l2jserver.util.Coordinate;
|
||||||
|
|
||||||
public class Item extends AbstractObject implements Playable, Spawnable,
|
public class Item extends AbstractObject implements Playable, Spawnable,
|
||||||
Listenable<ItemListener, ItemEvent> {
|
Listenable<ItemListener, ItemEvent>, Dropable {
|
||||||
private final ItemTemplateID templateID;
|
private final ItemTemplateID templateID;
|
||||||
private CharacterID ownerID;
|
private CharacterID ownerID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inventory location of this item
|
||||||
|
*/
|
||||||
|
private InventoryLocation location;
|
||||||
|
/**
|
||||||
|
* Paperdoll slot for this item
|
||||||
|
*/
|
||||||
|
private InventoryPaperdoll paperdoll;
|
||||||
|
/**
|
||||||
|
* Drop coordinate of this item
|
||||||
|
*/
|
||||||
|
private Coordinate coordinate;
|
||||||
|
|
||||||
public Item(ItemTemplateID templateID) {
|
public Item(ItemTemplateID templateID) {
|
||||||
this.templateID = templateID;
|
this.templateID = templateID;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void spawn(Coordinate coordinate) {
|
public void drop(Coordinate position) {
|
||||||
|
this.coordinate = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void spawn(Coordinate coordinate) {
|
||||||
|
this.drop(coordinate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -31,13 +52,44 @@ public class Item extends AbstractObject implements Playable, Spawnable,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Coordinate getPosition() {
|
public Coordinate getPosition() {
|
||||||
// TODO Auto-generated method stub
|
return coordinate;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setPosition(Coordinate coord) {
|
public void setPosition(Coordinate coord) {
|
||||||
|
this.coordinate = coord;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the location
|
||||||
|
*/
|
||||||
|
public InventoryLocation getLocation() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param location
|
||||||
|
* the location to set
|
||||||
|
*/
|
||||||
|
public void setLocation(InventoryLocation location) {
|
||||||
|
this.location = location;
|
||||||
|
if (location != InventoryLocation.PAPERDOLL)
|
||||||
|
this.paperdoll = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the paperdoll
|
||||||
|
*/
|
||||||
|
public InventoryPaperdoll getPaperdoll() {
|
||||||
|
return paperdoll;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param paperdoll
|
||||||
|
* the paperdoll to set
|
||||||
|
*/
|
||||||
|
public void setPaperdoll(InventoryPaperdoll paperdoll) {
|
||||||
|
this.paperdoll = paperdoll;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ public class CharacterInventory implements Iterable<Item> {
|
|||||||
this.character = character;
|
this.character = character;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method will add new items to the inventory. This is normally called
|
||||||
|
* from the DAO object.
|
||||||
|
*
|
||||||
|
* @param items
|
||||||
|
* the items to be added
|
||||||
|
*/
|
||||||
public void load(List<Item> items) {
|
public void load(List<Item> items) {
|
||||||
items.addAll(items);
|
items.addAll(items);
|
||||||
}
|
}
|
||||||
@@ -35,4 +42,12 @@ public class CharacterInventory implements Iterable<Item> {
|
|||||||
public Iterator<Item> iterator() {
|
public Iterator<Item> iterator() {
|
||||||
return items.iterator();
|
return items.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum InventoryLocation {
|
||||||
|
PAPERDOLL, INVENTORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum InventoryPaperdoll {
|
||||||
|
UNDERWEAR, HEAD, HAIR1, HAIR2, NECK, RIGHT_HAND, LEFT_HAND, RIGHT_EAR, LEFT_EAR, GLOVES, LEGS, LEFT_FEET, RIGHT_FEET, RIGHT_FINGER, LEFT_FINGER, LEFT_BRACELET, RIGHT_BRACELET, DECORATION_1, DECOREATION_2, DECORATION_3, DECORATION_4, DECORATION_5, DECORATION_6, CLOAK, BELT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ CREATE TABLE `character` (
|
|||||||
`account_id` varchar(50) NOT NULL,
|
`account_id` varchar(50) NOT NULL,
|
||||||
`name` varchar(50) NOT NULL,
|
`name` varchar(50) NOT NULL,
|
||||||
`race` enum('HUMAN') NOT NULL,
|
`race` enum('HUMAN') NOT NULL,
|
||||||
`class` enum('HUMAN_FIGHTER','WARRIOR','GLADIATOR','WARLORD','KNIGHT','PALADIN','DARK_AVENGER','ROGUE','REASURE_HUNTER','HAWKEYE','HUMAN_MYSTIC','WIZARD','SORCEROR','NECROMANCER','WARLOCK','CLERIC','BISHOP','PROPHET','ELVEN_FIGHTER','ELVEN_KNIGHT','TEMPLE_KNIGHT','SWORD_SINGER','ELVEN_SCOUT','PLAINS_WALKER','SILVER_RANGER','ELVEN_MYSTIC','ELVEN_WIZARD','SPELLSINGER','ELEMENTAL_SUMMONER','ORACLE','ELDER','DARK_FIGHTER','PALUS_KNIGHT','SHILLIEN_KNIGHT','BLADEDANCER','ASSASSIN','ABYSS_WALKER','PHANTOM_RANGER','DARK_MYSTIC','DARK_WIZARD','SPELLHOWLER','PHANTOM_SUMMONER','SHILLIEN_ORACLE','SHILLIEN_ELDER') NOT NULL DEFAULT 'HUMAN_FIGHTER',
|
`class` enum('HUMAN_FIGHTER','WARRIOR','GLADIATOR','WARLORD','KNIGHT','PALADIN','DARK_AVENGER','ROGUE','TREASURE_HUNTER','HAWKEYE','DUELIST','DREADNOUGHT','phoenixKnight','hellKnight','sagittarius','adventurer','HUMAN_MYSTIC','WIZARD','SORCEROR','NECROMANCER','WARLOCK','CLERIC','BISHOP','PROPHET','ARCHMAGE','SOULTAKER','ARCANA_LORD','CARDINAL','HIEROPHANT','ELVEN_FIGHTER','ELVEN_KNIGHT','TEMPLE_KNIGHT','SWORD_SINGER','ELVEN_SCOUT','PLAINS_WALKER','SILVER_RANGER','EVA_TEMPLAR','SWORD_MUSE','WIND_RIDER','MOONLIGHT_SENTINEL','ELVEN_MYSTIC','ELVEN_WIZARD','SPELLSINGER','ELEMENTAL_SUMMONER','ORACLE','ELDER','MYSTIC_MUSE','ELEMENTAL_MASTER','EVA_SAINT','DARK_FIGHTER','PALUS_KNIGHT','SHILLIEN_KNIGHT','BLADEDANCER','ASSASSIN','ABYSS_WALKER','PHANTOM_RANGER','SHILLIEN_TEMPLAR','spectralDancer','ghostHunter','ghostSentinel','DARK_MYSTIC','DARK_WIZARD','SPELLHOWLER','PHANTOM_SUMMONER','SHILLIEN_ORACLE','SHILLIEN_ELDER','STORM_SCREAMER','SPECTRAL_MASTER','SHILLIEAN_SAINT','ORC_FIGHTER','ORC_RAIDER','DESTROYER','ORC_MONK','TYRANT','TITAN','GRAND_KHAUATARI','ORC_MYSTIC','ORC_SHAMAN','OVERLORD','WARCRYER','DOMINATOR','DOOMCRYER','DWARVEN_FIGHTER','SCAVENGER','BOUNTY_HUNTER','ARTISAN','WARSMITH','FORTUNE_SEEKER','MAESTRO','MALE_SOLDIER','TROOPER','BERSEKER','MALE_SOULBREAKER','DOOMBRINGER','MALE_SOULDHOUND','FEMALE_SOLDIER','WARDER','FEMALE_SOULBREAKER','ARBALESTER','FEMALE_SOULDHOUND','TRICKSTER','INSPECTOR','JUDICATOR') NOT NULL DEFAULT 'HUMAN_FIGHTER',
|
||||||
`sex` enum('MALE','FEMALE') NOT NULL,
|
`sex` enum('MALE','FEMALE') NOT NULL,
|
||||||
`level` int(3) NOT NULL,
|
`level` int(3) NOT NULL,
|
||||||
`experience` int(15) NOT NULL,
|
`experience` int(15) NOT NULL,
|
||||||
@@ -12,7 +12,7 @@ CREATE TABLE `character` (
|
|||||||
`position_y` int(10) NOT NULL,
|
`position_y` int(10) NOT NULL,
|
||||||
`position_z` int(10) NOT NULL,
|
`position_z` int(10) NOT NULL,
|
||||||
`appearance_hair_style` enum('STYLE_A','STYLE_B','STYLE_C','STYLE_D','STYLE_E') NOT NULL DEFAULT 'STYLE_A',
|
`appearance_hair_style` enum('STYLE_A','STYLE_B','STYLE_C','STYLE_D','STYLE_E') NOT NULL DEFAULT 'STYLE_A',
|
||||||
`appearance_hair_color` enum('COLOR_A','COLOR_B','COLOR3_C','COLOR_D') NOT NULL DEFAULT 'COLOR_A',
|
`appearance_hair_color` enum('COLOR_A','COLOR_B','COLOR_C','COLOR_D') NOT NULL DEFAULT 'COLOR_A',
|
||||||
`apperance_face` enum('FACE_A','FACE_B','FACE_C') NOT NULL DEFAULT 'FACE_A',
|
`apperance_face` enum('FACE_A','FACE_B','FACE_C') NOT NULL DEFAULT 'FACE_A',
|
||||||
PRIMARY KEY (`character_id`),
|
PRIMARY KEY (`character_id`),
|
||||||
KEY `account_id` (`account_id`),
|
KEY `account_id` (`account_id`),
|
||||||
|
|||||||
Reference in New Issue
Block a user