Commit d7a488cd863f5b077fc10a34b3e9db3c037d9e99
1 parent
1901d26a
Relocate common
Showing
53 changed files
with
2290 additions
and
2295 deletions
Too many changes to show.
To preserve performance only 53 of 213 files are displayed.
resources/liteloader.properties deleted
100644 → 0
java/common/com/mumfrey/liteloader/Configurable.java renamed to src/main/java/com/mumfrey/liteloader/Configurable.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import com.mumfrey.liteloader.modconfig.ConfigPanel; | ||
4 | - | ||
5 | -/** | ||
6 | - * Interface for mods which want to provide a configuration panel inside the "mod info" screen | ||
7 | - * | ||
8 | - * @author Adam Mummery-Smith | ||
9 | - */ | ||
10 | -public interface Configurable | ||
11 | -{ | ||
12 | - /** | ||
13 | - * Get the class of the configuration panel to use, the returned class must have a | ||
14 | - * default (no-arg) constructor | ||
15 | - * | ||
16 | - * @return configuration panel class | ||
17 | - */ | ||
18 | - public abstract Class<? extends ConfigPanel> getConfigPanelClass(); | ||
19 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import com.mumfrey.liteloader.modconfig.ConfigPanel; | ||
4 | + | ||
5 | +/** | ||
6 | + * Interface for mods which want to provide a configuration panel inside the "mod info" screen | ||
7 | + * | ||
8 | + * @author Adam Mummery-Smith | ||
9 | + */ | ||
10 | +public interface Configurable | ||
11 | +{ | ||
12 | + /** | ||
13 | + * Get the class of the configuration panel to use, the returned class must have a | ||
14 | + * default (no-arg) constructor | ||
15 | + * | ||
16 | + * @return configuration panel class | ||
17 | + */ | ||
18 | + public abstract Class<? extends ConfigPanel> getConfigPanelClass(); | ||
19 | +} |
java/common/com/mumfrey/liteloader/LiteMod.java renamed to src/main/java/com/mumfrey/liteloader/LiteMod.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import java.io.File; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.api.Listener; | ||
6 | -import com.mumfrey.liteloader.modconfig.Exposable; | ||
7 | - | ||
8 | -/** | ||
9 | - * Base interface for mods | ||
10 | - * | ||
11 | - * @author Adam Mummery-Smith | ||
12 | - */ | ||
13 | -public interface LiteMod extends Exposable, Listener | ||
14 | -{ | ||
15 | - /** | ||
16 | - * Get the mod version string | ||
17 | - * | ||
18 | - * @return the mod version as a string | ||
19 | - */ | ||
20 | - public abstract String getVersion(); | ||
21 | - | ||
22 | - /** | ||
23 | - * Do startup stuff here, minecraft is not fully initialised when this function is called so mods *must not* | ||
24 | - * interact with minecraft in any way here | ||
25 | - * | ||
26 | - * @param configPath Configuration path to use | ||
27 | - */ | ||
28 | - public abstract void init(File configPath); | ||
29 | - | ||
30 | - /** | ||
31 | - * Called when the loader detects that a version change has happened since this mod was last loaded | ||
32 | - * | ||
33 | - * @param version new version | ||
34 | - * @param configPath Path for the new version-specific config | ||
35 | - * @param oldConfigPath Path for the old version-specific config | ||
36 | - */ | ||
37 | - public abstract void upgradeSettings(String version, File configPath, File oldConfigPath); | ||
38 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import java.io.File; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.api.Listener; | ||
6 | +import com.mumfrey.liteloader.modconfig.Exposable; | ||
7 | + | ||
8 | +/** | ||
9 | + * Base interface for mods | ||
10 | + * | ||
11 | + * @author Adam Mummery-Smith | ||
12 | + */ | ||
13 | +public interface LiteMod extends Exposable, Listener | ||
14 | +{ | ||
15 | + /** | ||
16 | + * Get the mod version string | ||
17 | + * | ||
18 | + * @return the mod version as a string | ||
19 | + */ | ||
20 | + public abstract String getVersion(); | ||
21 | + | ||
22 | + /** | ||
23 | + * Do startup stuff here, minecraft is not fully initialised when this function is called so mods *must not* | ||
24 | + * interact with minecraft in any way here | ||
25 | + * | ||
26 | + * @param configPath Configuration path to use | ||
27 | + */ | ||
28 | + public abstract void init(File configPath); | ||
29 | + | ||
30 | + /** | ||
31 | + * Called when the loader detects that a version change has happened since this mod was last loaded | ||
32 | + * | ||
33 | + * @param version new version | ||
34 | + * @param configPath Path for the new version-specific config | ||
35 | + * @param oldConfigPath Path for the old version-specific config | ||
36 | + */ | ||
37 | + public abstract void upgradeSettings(String version, File configPath, File oldConfigPath); | ||
38 | +} |
java/common/com/mumfrey/liteloader/PacketHandler.java renamed to src/main/java/com/mumfrey/liteloader/PacketHandler.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import java.util.List; | ||
4 | - | ||
5 | -import net.minecraft.network.INetHandler; | ||
6 | -import net.minecraft.network.Packet; | ||
7 | - | ||
8 | -/** | ||
9 | - * Interface for mods which want to handle raw packets | ||
10 | - * | ||
11 | - * @author Adam Mummery-Smith | ||
12 | - */ | ||
13 | -public interface PacketHandler extends LiteMod | ||
14 | -{ | ||
15 | - /** | ||
16 | - * Get list of packets to handle | ||
17 | - */ | ||
18 | - public List<Class<? extends Packet>> getHandledPackets(); | ||
19 | - | ||
20 | - /** | ||
21 | - * @param netHandler The vanilla nethandler which will handle this packet if not cancelled | ||
22 | - * @param packet Incoming packet | ||
23 | - * @return True to allow further processing of this packet, including other PacketHandlers and eventually the vanilla netHandler, to inhibit further | ||
24 | - * processing return false. You may choose to return false and then invoke the vanilla handler method on the supplied INetHandler if you wish to | ||
25 | - * inhibit later PacketHandlers but preserve vanilla behaviour. | ||
26 | - */ | ||
27 | - public abstract boolean handlePacket(INetHandler netHandler, Packet packet); | ||
28 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import net.minecraft.network.INetHandler; | ||
6 | +import net.minecraft.network.Packet; | ||
7 | + | ||
8 | +/** | ||
9 | + * Interface for mods which want to handle raw packets | ||
10 | + * | ||
11 | + * @author Adam Mummery-Smith | ||
12 | + */ | ||
13 | +public interface PacketHandler extends LiteMod | ||
14 | +{ | ||
15 | + /** | ||
16 | + * Get list of packets to handle | ||
17 | + */ | ||
18 | + public List<Class<? extends Packet>> getHandledPackets(); | ||
19 | + | ||
20 | + /** | ||
21 | + * @param netHandler The vanilla nethandler which will handle this packet if not cancelled | ||
22 | + * @param packet Incoming packet | ||
23 | + * @return True to allow further processing of this packet, including other PacketHandlers and eventually the vanilla netHandler, to inhibit further | ||
24 | + * processing return false. You may choose to return false and then invoke the vanilla handler method on the supplied INetHandler if you wish to | ||
25 | + * inhibit later PacketHandlers but preserve vanilla behaviour. | ||
26 | + */ | ||
27 | + public abstract boolean handlePacket(INetHandler netHandler, Packet packet); | ||
28 | +} |
java/common/com/mumfrey/liteloader/Permissible.java renamed to src/main/java/com/mumfrey/liteloader/Permissible.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import com.mumfrey.liteloader.permissions.PermissionsManager; | ||
4 | -import com.mumfrey.liteloader.permissions.PermissionsManagerClient; | ||
5 | - | ||
6 | -/** | ||
7 | - * Interface for mods which use the ClientPermissions system | ||
8 | - * | ||
9 | - * @author Adam Mummery-Smith | ||
10 | - */ | ||
11 | -public interface Permissible extends LiteMod | ||
12 | -{ | ||
13 | - /** | ||
14 | - * Returns the node name of the mod, replicated permissions will be of the form mod.<name>.permission.node so this | ||
15 | - * method must return a valid name for use in permission nodes. This method must also return the same value every | ||
16 | - * time it is called since permissible names are not necessarily cached. | ||
17 | - * | ||
18 | - * @return Permissible name | ||
19 | - */ | ||
20 | - public abstract String getPermissibleModName(); | ||
21 | - | ||
22 | - /** | ||
23 | - * The mod version to replicate to the server | ||
24 | - * | ||
25 | - * @return Mod version as a float | ||
26 | - */ | ||
27 | - public abstract float getPermissibleModVersion(); | ||
28 | - | ||
29 | - /** | ||
30 | - * Called by the permissions manager at initialisation to instruct the mod to populate the list of permissions it | ||
31 | - * supports. This method should call back against the supplied permissions manager to register the permissions to | ||
32 | - * be sent to the server when connecting. | ||
33 | - * | ||
34 | - * @param permissionsManager Client permissions manager | ||
35 | - */ | ||
36 | - public abstract void registerPermissions(PermissionsManagerClient permissionsManager); | ||
37 | - | ||
38 | - /** | ||
39 | - * Called when the permissions set is cleared | ||
40 | - * | ||
41 | - * @param manager | ||
42 | - */ | ||
43 | - public abstract void onPermissionsCleared(PermissionsManager manager); | ||
44 | - | ||
45 | - /** | ||
46 | - * Called when the permissions are changed (eg. when new permissions are received from the server) | ||
47 | - * | ||
48 | - * @param manager | ||
49 | - */ | ||
50 | - public abstract void onPermissionsChanged(PermissionsManager manager); | ||
51 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import com.mumfrey.liteloader.permissions.PermissionsManager; | ||
4 | +import com.mumfrey.liteloader.permissions.PermissionsManagerClient; | ||
5 | + | ||
6 | +/** | ||
7 | + * Interface for mods which use the ClientPermissions system | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public interface Permissible extends LiteMod | ||
12 | +{ | ||
13 | + /** | ||
14 | + * Returns the node name of the mod, replicated permissions will be of the form mod.<name>.permission.node so this | ||
15 | + * method must return a valid name for use in permission nodes. This method must also return the same value every | ||
16 | + * time it is called since permissible names are not necessarily cached. | ||
17 | + * | ||
18 | + * @return Permissible name | ||
19 | + */ | ||
20 | + public abstract String getPermissibleModName(); | ||
21 | + | ||
22 | + /** | ||
23 | + * The mod version to replicate to the server | ||
24 | + * | ||
25 | + * @return Mod version as a float | ||
26 | + */ | ||
27 | + public abstract float getPermissibleModVersion(); | ||
28 | + | ||
29 | + /** | ||
30 | + * Called by the permissions manager at initialisation to instruct the mod to populate the list of permissions it | ||
31 | + * supports. This method should call back against the supplied permissions manager to register the permissions to | ||
32 | + * be sent to the server when connecting. | ||
33 | + * | ||
34 | + * @param permissionsManager Client permissions manager | ||
35 | + */ | ||
36 | + public abstract void registerPermissions(PermissionsManagerClient permissionsManager); | ||
37 | + | ||
38 | + /** | ||
39 | + * Called when the permissions set is cleared | ||
40 | + * | ||
41 | + * @param manager | ||
42 | + */ | ||
43 | + public abstract void onPermissionsCleared(PermissionsManager manager); | ||
44 | + | ||
45 | + /** | ||
46 | + * Called when the permissions are changed (eg. when new permissions are received from the server) | ||
47 | + * | ||
48 | + * @param manager | ||
49 | + */ | ||
50 | + public abstract void onPermissionsChanged(PermissionsManager manager); | ||
51 | +} |
java/common/com/mumfrey/liteloader/PlayerInteractionListener.java renamed to src/main/java/com/mumfrey/liteloader/PlayerInteractionListener.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | -import net.minecraft.util.BlockPos; | ||
5 | -import net.minecraft.util.EnumFacing; | ||
6 | -import net.minecraft.util.MovingObjectPosition.MovingObjectType; | ||
7 | - | ||
8 | -/** | ||
9 | - * Interface for mods which want to observe the player's "interaction" status (player mouse clicks), allows block interaction | ||
10 | - * events to be cancelled. | ||
11 | - * | ||
12 | - * @author Adam Mummery-Smith | ||
13 | - */ | ||
14 | -public interface PlayerInteractionListener extends LiteMod | ||
15 | -{ | ||
16 | - /** | ||
17 | - * Mouse buttons | ||
18 | - */ | ||
19 | - public static enum MouseButton | ||
20 | - { | ||
21 | - LEFT, | ||
22 | - RIGHT | ||
23 | - } | ||
24 | - | ||
25 | - /** | ||
26 | - * Called when the player clicks but does not "hit" a block, the trace position is raytraced to the player's current view | ||
27 | - * distance and represents the block which the player is "looking at". This method is NOT called when the player right clicks | ||
28 | - * with an empty hand. | ||
29 | - * | ||
30 | - * @param player Player | ||
31 | - * @param button Mouse button the user clicked | ||
32 | - * @param tracePos Raytraced location of the block which was hit | ||
33 | - * @param traceSideHit Raytraced side hit | ||
34 | - * @param traceHitType Type of hit, will be MISS if the trace expired without hitting anything (eg. the player clicked the sky) | ||
35 | - */ | ||
36 | - public abstract void onPlayerClickedAir(EntityPlayerMP player, MouseButton button, BlockPos tracePos, EnumFacing traceSideHit, MovingObjectType traceHitType); | ||
37 | - | ||
38 | - /** | ||
39 | - * Calls when the player clicks and hits a block, usually indicates that the player is digging or placing a block, although | ||
40 | - * a block placement does not necessarily succeed. Return true from this callback to allow the action to proceed, or false to | ||
41 | - * cancel the action. Cancelling the action does not prevent further handlers from receiving the event. | ||
42 | - * | ||
43 | - * @param player Player | ||
44 | - * @param button Mouse button that was pressed (left = dig, right = interact/place) | ||
45 | - * @param hitPos Block which was *hit*. Note that block placement will normally be at hitPos.offset(sideHit) | ||
46 | - * @param sideHit Side of the block which was hit | ||
47 | - * @return true to allow the action to be processed (another listener may still inhibit the action), return false to cancel the action (other listeners will still be notified) | ||
48 | - */ | ||
49 | - public abstract boolean onPlayerClickedBlock(EntityPlayerMP player, MouseButton button, BlockPos hitPos, EnumFacing sideHit); | ||
50 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | +import net.minecraft.util.BlockPos; | ||
5 | +import net.minecraft.util.EnumFacing; | ||
6 | +import net.minecraft.util.MovingObjectPosition.MovingObjectType; | ||
7 | + | ||
8 | +/** | ||
9 | + * Interface for mods which want to observe the player's "interaction" status (player mouse clicks), allows block interaction | ||
10 | + * events to be cancelled. | ||
11 | + * | ||
12 | + * @author Adam Mummery-Smith | ||
13 | + */ | ||
14 | +public interface PlayerInteractionListener extends LiteMod | ||
15 | +{ | ||
16 | + /** | ||
17 | + * Mouse buttons | ||
18 | + */ | ||
19 | + public static enum MouseButton | ||
20 | + { | ||
21 | + LEFT, | ||
22 | + RIGHT | ||
23 | + } | ||
24 | + | ||
25 | + /** | ||
26 | + * Called when the player clicks but does not "hit" a block, the trace position is raytraced to the player's current view | ||
27 | + * distance and represents the block which the player is "looking at". This method is NOT called when the player right clicks | ||
28 | + * with an empty hand. | ||
29 | + * | ||
30 | + * @param player Player | ||
31 | + * @param button Mouse button the user clicked | ||
32 | + * @param tracePos Raytraced location of the block which was hit | ||
33 | + * @param traceSideHit Raytraced side hit | ||
34 | + * @param traceHitType Type of hit, will be MISS if the trace expired without hitting anything (eg. the player clicked the sky) | ||
35 | + */ | ||
36 | + public abstract void onPlayerClickedAir(EntityPlayerMP player, MouseButton button, BlockPos tracePos, EnumFacing traceSideHit, MovingObjectType traceHitType); | ||
37 | + | ||
38 | + /** | ||
39 | + * Calls when the player clicks and hits a block, usually indicates that the player is digging or placing a block, although | ||
40 | + * a block placement does not necessarily succeed. Return true from this callback to allow the action to proceed, or false to | ||
41 | + * cancel the action. Cancelling the action does not prevent further handlers from receiving the event. | ||
42 | + * | ||
43 | + * @param player Player | ||
44 | + * @param button Mouse button that was pressed (left = dig, right = interact/place) | ||
45 | + * @param hitPos Block which was *hit*. Note that block placement will normally be at hitPos.offset(sideHit) | ||
46 | + * @param sideHit Side of the block which was hit | ||
47 | + * @return true to allow the action to be processed (another listener may still inhibit the action), return false to cancel the action (other listeners will still be notified) | ||
48 | + */ | ||
49 | + public abstract boolean onPlayerClickedBlock(EntityPlayerMP player, MouseButton button, BlockPos hitPos, EnumFacing sideHit); | ||
50 | +} |
java/common/com/mumfrey/liteloader/PlayerMoveListener.java renamed to src/main/java/com/mumfrey/liteloader/PlayerMoveListener.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.core.LiteLoaderEventBroker.ReturnValue; | ||
6 | -import com.mumfrey.liteloader.util.Position; | ||
7 | - | ||
8 | -/** | ||
9 | - * Interface for mods which want to monitor or control player movements | ||
10 | - * | ||
11 | - * @author Adam Mummery-Smith | ||
12 | - */ | ||
13 | -public interface PlayerMoveListener extends LiteMod | ||
14 | -{ | ||
15 | - /** | ||
16 | - * Called when a movement/look packet is received from the client. | ||
17 | - * | ||
18 | - * @param playerMP Player moving | ||
19 | - * @param from Player's previous recorded position | ||
20 | - * @param to Position the player is attempting to move to | ||
21 | - * @param newPos Set this position to teleport the player to newPos instead of processing the original move | ||
22 | - * | ||
23 | - * @return false to cancel the event or true to allow the movement to be processed as normal or newPos to be applied | ||
24 | - */ | ||
25 | - public abstract boolean onPlayerMove(EntityPlayerMP playerMP, Position from, Position to, ReturnValue<Position> newPos); | ||
26 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.core.LiteLoaderEventBroker.ReturnValue; | ||
6 | +import com.mumfrey.liteloader.util.Position; | ||
7 | + | ||
8 | +/** | ||
9 | + * Interface for mods which want to monitor or control player movements | ||
10 | + * | ||
11 | + * @author Adam Mummery-Smith | ||
12 | + */ | ||
13 | +public interface PlayerMoveListener extends LiteMod | ||
14 | +{ | ||
15 | + /** | ||
16 | + * Called when a movement/look packet is received from the client. | ||
17 | + * | ||
18 | + * @param playerMP Player moving | ||
19 | + * @param from Player's previous recorded position | ||
20 | + * @param to Position the player is attempting to move to | ||
21 | + * @param newPos Set this position to teleport the player to newPos instead of processing the original move | ||
22 | + * | ||
23 | + * @return false to cancel the event or true to allow the movement to be processed as normal or newPos to be applied | ||
24 | + */ | ||
25 | + public abstract boolean onPlayerMove(EntityPlayerMP playerMP, Position from, Position to, ReturnValue<Position> newPos); | ||
26 | +} |
java/common/com/mumfrey/liteloader/PluginChannelListener.java renamed to src/main/java/com/mumfrey/liteloader/PluginChannelListener.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.network.PacketBuffer; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.core.CommonPluginChannelListener; | ||
6 | - | ||
7 | -/** | ||
8 | - * Interface for mods which want to use plugin channels | ||
9 | - * | ||
10 | - * @author Adam Mummery-Smith | ||
11 | - */ | ||
12 | -public interface PluginChannelListener extends LiteMod, CommonPluginChannelListener | ||
13 | -{ | ||
14 | - /** | ||
15 | - * Called when a custom payload packet arrives on a channel this mod has registered | ||
16 | - * | ||
17 | - * @param channel Channel on which the custom payload was received | ||
18 | - * @param data Custom payload data | ||
19 | - */ | ||
20 | - public abstract void onCustomPayload(String channel, PacketBuffer data); | ||
21 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.network.PacketBuffer; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.core.CommonPluginChannelListener; | ||
6 | + | ||
7 | +/** | ||
8 | + * Interface for mods which want to use plugin channels | ||
9 | + * | ||
10 | + * @author Adam Mummery-Smith | ||
11 | + */ | ||
12 | +public interface PluginChannelListener extends LiteMod, CommonPluginChannelListener | ||
13 | +{ | ||
14 | + /** | ||
15 | + * Called when a custom payload packet arrives on a channel this mod has registered | ||
16 | + * | ||
17 | + * @param channel Channel on which the custom payload was received | ||
18 | + * @param data Custom payload data | ||
19 | + */ | ||
20 | + public abstract void onCustomPayload(String channel, PacketBuffer data); | ||
21 | +} |
java/common/com/mumfrey/liteloader/PreJoinGameListener.java renamed to src/main/java/com/mumfrey/liteloader/PreJoinGameListener.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.network.INetHandler; | ||
4 | -import net.minecraft.network.play.server.S01PacketJoinGame; | ||
5 | - | ||
6 | - | ||
7 | -/** | ||
8 | - * Interface for mods which wish to be notified when the player connects to a server (or local game) | ||
9 | - * | ||
10 | - * @author Adam Mummery-Smith | ||
11 | - */ | ||
12 | -public interface PreJoinGameListener extends LiteMod | ||
13 | -{ | ||
14 | - /** | ||
15 | - * Called before login. NOTICE: as of 1.8 the return value of this method has a different meaning! | ||
16 | - * | ||
17 | - * @param netHandler Net handler | ||
18 | - * @param joinGamePacket Join game packet | ||
19 | - * | ||
20 | - * @return true to allow login to continue, false to cancel login | ||
21 | - */ | ||
22 | - public abstract boolean onPreJoinGame(INetHandler netHandler, S01PacketJoinGame joinGamePacket); | ||
23 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.network.INetHandler; | ||
4 | +import net.minecraft.network.play.server.S01PacketJoinGame; | ||
5 | + | ||
6 | + | ||
7 | +/** | ||
8 | + * Interface for mods which wish to be notified when the player connects to a server (or local game) | ||
9 | + * | ||
10 | + * @author Adam Mummery-Smith | ||
11 | + */ | ||
12 | +public interface PreJoinGameListener extends LiteMod | ||
13 | +{ | ||
14 | + /** | ||
15 | + * Called before login. NOTICE: as of 1.8 the return value of this method has a different meaning! | ||
16 | + * | ||
17 | + * @param netHandler Net handler | ||
18 | + * @param joinGamePacket Join game packet | ||
19 | + * | ||
20 | + * @return true to allow login to continue, false to cancel login | ||
21 | + */ | ||
22 | + public abstract boolean onPreJoinGame(INetHandler netHandler, S01PacketJoinGame joinGamePacket); | ||
23 | +} |
java/common/com/mumfrey/liteloader/Priority.java renamed to src/main/java/com/mumfrey/liteloader/Priority.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import java.lang.annotation.ElementType; | ||
4 | -import java.lang.annotation.Retention; | ||
5 | -import java.lang.annotation.RetentionPolicy; | ||
6 | -import java.lang.annotation.Target; | ||
7 | - | ||
8 | -/** | ||
9 | - * Priority declaration for LiteMods, used when sorting listener lists. Default value if no Priority annotation | ||
10 | - * is specified is 1000. | ||
11 | - * | ||
12 | - * @author Adam Mummery-Smith | ||
13 | - */ | ||
14 | -@Target(ElementType.TYPE) | ||
15 | -@Retention(RetentionPolicy.RUNTIME) | ||
16 | -public @interface Priority | ||
17 | -{ | ||
18 | - /** | ||
19 | - * Priority value, default priority is 1000 | ||
20 | - */ | ||
21 | - public int value(); | ||
22 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import java.lang.annotation.ElementType; | ||
4 | +import java.lang.annotation.Retention; | ||
5 | +import java.lang.annotation.RetentionPolicy; | ||
6 | +import java.lang.annotation.Target; | ||
7 | + | ||
8 | +/** | ||
9 | + * Priority declaration for LiteMods, used when sorting listener lists. Default value if no Priority annotation | ||
10 | + * is specified is 1000. | ||
11 | + * | ||
12 | + * @author Adam Mummery-Smith | ||
13 | + */ | ||
14 | +@Target(ElementType.TYPE) | ||
15 | +@Retention(RetentionPolicy.RUNTIME) | ||
16 | +public @interface Priority | ||
17 | +{ | ||
18 | + /** | ||
19 | + * Priority value, default priority is 1000 | ||
20 | + */ | ||
21 | + public int value(); | ||
22 | +} |
java/common/com/mumfrey/liteloader/ServerChatFilter.java renamed to src/main/java/com/mumfrey/liteloader/ServerChatFilter.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | -import net.minecraft.network.play.client.C01PacketChatMessage; | ||
5 | - | ||
6 | -/** | ||
7 | - * Interface for mods which can filter inbound chat | ||
8 | - * | ||
9 | - * @author Adam Mummery-Smith | ||
10 | - */ | ||
11 | -public interface ServerChatFilter extends LiteMod | ||
12 | -{ | ||
13 | - /** | ||
14 | - * Chat filter function, return false to filter this packet, true to pass the packet | ||
15 | - * | ||
16 | - * @param chatPacket Chat packet to examine | ||
17 | - * @param message Chat message | ||
18 | - * @return True to keep the packet, false to discard | ||
19 | - */ | ||
20 | - public abstract boolean onChat(EntityPlayerMP player, C01PacketChatMessage chatPacket, String message); | ||
21 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | +import net.minecraft.network.play.client.C01PacketChatMessage; | ||
5 | + | ||
6 | +/** | ||
7 | + * Interface for mods which can filter inbound chat | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public interface ServerChatFilter extends LiteMod | ||
12 | +{ | ||
13 | + /** | ||
14 | + * Chat filter function, return false to filter this packet, true to pass the packet | ||
15 | + * | ||
16 | + * @param chatPacket Chat packet to examine | ||
17 | + * @param message Chat message | ||
18 | + * @return True to keep the packet, false to discard | ||
19 | + */ | ||
20 | + public abstract boolean onChat(EntityPlayerMP player, C01PacketChatMessage chatPacket, String message); | ||
21 | +} |
java/common/com/mumfrey/liteloader/ServerCommandProvider.java renamed to src/main/java/com/mumfrey/liteloader/ServerCommandProvider.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.command.ServerCommandManager; | ||
4 | - | ||
5 | - | ||
6 | -/** | ||
7 | - * Interface for mods which provide commands to the local integrated server | ||
8 | - * | ||
9 | - * @author Adam Mummery-Smith | ||
10 | - */ | ||
11 | -public interface ServerCommandProvider extends LiteMod | ||
12 | -{ | ||
13 | - /** | ||
14 | - * Allows the mod to provide commands to the server command manager my invoking commandManager.registerCommand() to | ||
15 | - * provide new commands for single player and lan worlds | ||
16 | - * | ||
17 | - * @param commandManager | ||
18 | - */ | ||
19 | - public abstract void provideCommands(ServerCommandManager commandManager); | ||
20 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.command.ServerCommandManager; | ||
4 | + | ||
5 | + | ||
6 | +/** | ||
7 | + * Interface for mods which provide commands to the local integrated server | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public interface ServerCommandProvider extends LiteMod | ||
12 | +{ | ||
13 | + /** | ||
14 | + * Allows the mod to provide commands to the server command manager my invoking commandManager.registerCommand() to | ||
15 | + * provide new commands for single player and lan worlds | ||
16 | + * | ||
17 | + * @param commandManager | ||
18 | + */ | ||
19 | + public abstract void provideCommands(ServerCommandManager commandManager); | ||
20 | +} |
java/common/com/mumfrey/liteloader/ServerPlayerListener.java renamed to src/main/java/com/mumfrey/liteloader/ServerPlayerListener.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | - | ||
5 | -import com.mojang.authlib.GameProfile; | ||
6 | - | ||
7 | -/** | ||
8 | - * Interface for mods which want to handle players joining and leaving a LAN game (or single player game) | ||
9 | - * | ||
10 | - * @author Adam Mummery-Smith | ||
11 | - */ | ||
12 | -public interface ServerPlayerListener extends LiteMod | ||
13 | -{ | ||
14 | - /** | ||
15 | - * Called when a player connects to the server and the EntityPlayerMP instance is created, the player has not logged | ||
16 | - * in at this point and may be disconnected if login fails | ||
17 | - * | ||
18 | - * @param player Player attempting to connect | ||
19 | - * @param profile Player's GameProfile from the authentication service | ||
20 | - */ | ||
21 | - public abstract void onPlayerConnect(EntityPlayerMP player, GameProfile profile); | ||
22 | - | ||
23 | - /** | ||
24 | - * Called once the player has successfully logged in and all player variables are initialised and replicated | ||
25 | - * | ||
26 | - * @param player Player connected | ||
27 | - */ | ||
28 | - public abstract void onPlayerLoggedIn(EntityPlayerMP player); | ||
29 | - | ||
30 | - /** | ||
31 | - * Called when a player respawns. This event is raised when a player respawns after dying or conquers the end | ||
32 | - * | ||
33 | - * @param player New player instance | ||
34 | - * @param oldPlayer Old player instance being discarded | ||
35 | - * @param newDimension Dimension the player is respawning in | ||
36 | - * @param playerWonTheGame True if the player conquered the end (this respawn is NOT as the result of a death) | ||
37 | - */ | ||
38 | - public abstract void onPlayerRespawn(EntityPlayerMP player, EntityPlayerMP oldPlayer, int newDimension, boolean playerWonTheGame); | ||
39 | - | ||
40 | - /** | ||
41 | - * Called when a player disconnects from the game | ||
42 | - * | ||
43 | - * @param player Player disconnecting | ||
44 | - */ | ||
45 | - public abstract void onPlayerLogout(EntityPlayerMP player); | ||
46 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | + | ||
5 | +import com.mojang.authlib.GameProfile; | ||
6 | + | ||
7 | +/** | ||
8 | + * Interface for mods which want to handle players joining and leaving a LAN game (or single player game) | ||
9 | + * | ||
10 | + * @author Adam Mummery-Smith | ||
11 | + */ | ||
12 | +public interface ServerPlayerListener extends LiteMod | ||
13 | +{ | ||
14 | + /** | ||
15 | + * Called when a player connects to the server and the EntityPlayerMP instance is created, the player has not logged | ||
16 | + * in at this point and may be disconnected if login fails | ||
17 | + * | ||
18 | + * @param player Player attempting to connect | ||
19 | + * @param profile Player's GameProfile from the authentication service | ||
20 | + */ | ||
21 | + public abstract void onPlayerConnect(EntityPlayerMP player, GameProfile profile); | ||
22 | + | ||
23 | + /** | ||
24 | + * Called once the player has successfully logged in and all player variables are initialised and replicated | ||
25 | + * | ||
26 | + * @param player Player connected | ||
27 | + */ | ||
28 | + public abstract void onPlayerLoggedIn(EntityPlayerMP player); | ||
29 | + | ||
30 | + /** | ||
31 | + * Called when a player respawns. This event is raised when a player respawns after dying or conquers the end | ||
32 | + * | ||
33 | + * @param player New player instance | ||
34 | + * @param oldPlayer Old player instance being discarded | ||
35 | + * @param newDimension Dimension the player is respawning in | ||
36 | + * @param playerWonTheGame True if the player conquered the end (this respawn is NOT as the result of a death) | ||
37 | + */ | ||
38 | + public abstract void onPlayerRespawn(EntityPlayerMP player, EntityPlayerMP oldPlayer, int newDimension, boolean playerWonTheGame); | ||
39 | + | ||
40 | + /** | ||
41 | + * Called when a player disconnects from the game | ||
42 | + * | ||
43 | + * @param player Player disconnecting | ||
44 | + */ | ||
45 | + public abstract void onPlayerLogout(EntityPlayerMP player); | ||
46 | +} |
java/common/com/mumfrey/liteloader/ServerPluginChannelListener.java renamed to src/main/java/com/mumfrey/liteloader/ServerPluginChannelListener.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | -import net.minecraft.network.PacketBuffer; | ||
5 | - | ||
6 | -import com.mumfrey.liteloader.core.CommonPluginChannelListener; | ||
7 | - | ||
8 | -/** | ||
9 | - * Interface for mods which want to use plugin channels on the (integrated) server side | ||
10 | - * | ||
11 | - * @author Adam Mummery-Smith | ||
12 | - */ | ||
13 | -public interface ServerPluginChannelListener extends CommonPluginChannelListener | ||
14 | -{ | ||
15 | - /** | ||
16 | - * Called when a custom payload packet arrives on a channel this mod has registered | ||
17 | - * | ||
18 | - * @param sender Player object which is the source of this message | ||
19 | - * @param channel Channel on which the custom payload was received | ||
20 | - * @param data Custom payload data | ||
21 | - */ | ||
22 | - public abstract void onCustomPayload(EntityPlayerMP sender, String channel, PacketBuffer data); | ||
23 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.entity.player.EntityPlayerMP; | ||
4 | +import net.minecraft.network.PacketBuffer; | ||
5 | + | ||
6 | +import com.mumfrey.liteloader.core.CommonPluginChannelListener; | ||
7 | + | ||
8 | +/** | ||
9 | + * Interface for mods which want to use plugin channels on the (integrated) server side | ||
10 | + * | ||
11 | + * @author Adam Mummery-Smith | ||
12 | + */ | ||
13 | +public interface ServerPluginChannelListener extends CommonPluginChannelListener | ||
14 | +{ | ||
15 | + /** | ||
16 | + * Called when a custom payload packet arrives on a channel this mod has registered | ||
17 | + * | ||
18 | + * @param sender Player object which is the source of this message | ||
19 | + * @param channel Channel on which the custom payload was received | ||
20 | + * @param data Custom payload data | ||
21 | + */ | ||
22 | + public abstract void onCustomPayload(EntityPlayerMP sender, String channel, PacketBuffer data); | ||
23 | +} |
java/common/com/mumfrey/liteloader/ServerTickable.java renamed to src/main/java/com/mumfrey/liteloader/ServerTickable.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -import net.minecraft.server.MinecraftServer; | ||
4 | - | ||
5 | -/** | ||
6 | - * Interface for mods which want to be ticked on the server thread | ||
7 | - * | ||
8 | - * @author Adam Mummery-Smith | ||
9 | - */ | ||
10 | -public interface ServerTickable extends LiteMod | ||
11 | -{ | ||
12 | - /** | ||
13 | - * Called at the start of every server update tick | ||
14 | - * | ||
15 | - * @param server | ||
16 | - */ | ||
17 | - public abstract void onTick(MinecraftServer server); | ||
18 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +import net.minecraft.server.MinecraftServer; | ||
4 | + | ||
5 | +/** | ||
6 | + * Interface for mods which want to be ticked on the server thread | ||
7 | + * | ||
8 | + * @author Adam Mummery-Smith | ||
9 | + */ | ||
10 | +public interface ServerTickable extends LiteMod | ||
11 | +{ | ||
12 | + /** | ||
13 | + * Called at the start of every server update tick | ||
14 | + * | ||
15 | + * @param server | ||
16 | + */ | ||
17 | + public abstract void onTick(MinecraftServer server); | ||
18 | +} |
java/common/com/mumfrey/liteloader/ShutdownListener.java renamed to src/main/java/com/mumfrey/liteloader/ShutdownListener.java
1 | -package com.mumfrey.liteloader; | ||
2 | - | ||
3 | -/** | ||
4 | - * Interface for mods that want to receive an event when the game is shutting down due to a user request. They do | ||
5 | - * not receive the callback when the VM is terminating for other reasons, use a regular VM shutdownhook for that. | ||
6 | - * | ||
7 | - * @author Adam Mummery-Smith | ||
8 | - */ | ||
9 | -public interface ShutdownListener extends LiteMod | ||
10 | -{ | ||
11 | - public abstract void onShutDown(); | ||
12 | -} | 1 | +package com.mumfrey.liteloader; |
2 | + | ||
3 | +/** | ||
4 | + * Interface for mods that want to receive an event when the game is shutting down due to a user request. They do | ||
5 | + * not receive the callback when the VM is terminating for other reasons, use a regular VM shutdownhook for that. | ||
6 | + * | ||
7 | + * @author Adam Mummery-Smith | ||
8 | + */ | ||
9 | +public interface ShutdownListener extends LiteMod | ||
10 | +{ | ||
11 | + public abstract void onShutDown(); | ||
12 | +} |
java/common/com/mumfrey/liteloader/api/BrandingProvider.java renamed to src/main/java/com/mumfrey/liteloader/api/BrandingProvider.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import java.net.URI; | ||
4 | - | ||
5 | -import net.minecraft.util.ResourceLocation; | ||
6 | - | ||
7 | -import com.mumfrey.liteloader.util.render.Icon; | ||
8 | - | ||
9 | -/** | ||
10 | - * LiteLoader Extensible API - Branding Provider | ||
11 | - * | ||
12 | - * The Branding Provider manages loader branding alterations for a particular API. This is an optional | ||
13 | - * API component which allows an API to specify customisations and additions to the loader environment | ||
14 | - * in order to provide a more comfortable integration for the API. | ||
15 | - * | ||
16 | - * Since some branding options simply stack (like the API copyright notices for example) all APIs will | ||
17 | - * be allowed to supply this information, however other options (like the main logo image) can only be | ||
18 | - * set by one API. To determine which API should be used to set this information, the getPriority() | ||
19 | - * method will be called and used to sort branding providers by priority, with highest priority winning. | ||
20 | - * | ||
21 | - * All branding options may return a null/not set value, allowing a branding provider to only override | ||
22 | - * the branding features it wishes. Some options require a non-null value to be returned from a set of | ||
23 | - * methods in order to take effect. eg. the logo option requires non-null return values from BOTH the | ||
24 | - * getLogoResource() and getLogoCoords() methods. | ||
25 | - * | ||
26 | - * @author Adam Mummery-Smith | ||
27 | - */ | ||
28 | -public interface BrandingProvider extends CustomisationProvider | ||
29 | -{ | ||
30 | - /** | ||
31 | - * Get the priority of this provider, higher numbers take precedence. Some brandings can only be set | ||
32 | - * by one provider (eg. the main "about" logo) so the branding provider with the highest priority will | ||
33 | - * be the one which gets control of that feature. | ||
34 | - */ | ||
35 | - public abstract int getPriority(); | ||
36 | - | ||
37 | - /** | ||
38 | - * Get the primary branding colour for this API, the branding provider should return 0 if it | ||
39 | - * does not wish to override the branding colour. The branding colour is used for the mod list | ||
40 | - * entries and hyper-links within the about GUI panels, the colour returned should be fully opaque. | ||
41 | - */ | ||
42 | - public abstract int getBrandingColour(); | ||
43 | - | ||
44 | - /** | ||
45 | - * Get the resource to use for the main logo, the API with the highest priority gets to define the | ||
46 | - * logo, this method can return null if this API does not want to override the logo | ||
47 | - */ | ||
48 | - public abstract ResourceLocation getLogoResource(); | ||
49 | - | ||
50 | - /** | ||
51 | - * Gets the coordinates of the logo as an IIcon instance, only called if getLogoResource() returns | ||
52 | - * a non-null value and the logo will only be used if BOTH methods return a valid object. | ||
53 | - */ | ||
54 | - public abstract Icon getLogoCoords(); | ||
55 | - | ||
56 | - /** | ||
57 | - * Get the resource to use for the icon logo (the chicken in the default setup), the API with the | ||
58 | - * highest priority gets to define the icon logo, this method can return null if this API does not | ||
59 | - * want to override the icon | ||
60 | - */ | ||
61 | - public abstract ResourceLocation getIconResource(); | ||
62 | - | ||
63 | - /** | ||
64 | - * Gets the coordinates of the icon logo as an IIcon instance, only called if getIconResource() | ||
65 | - * returns a non-null value and the icon will only be used if BOTH methods return a valid object. | ||
66 | - */ | ||
67 | - public abstract Icon getIconCoords(); | ||
68 | - | ||
69 | - /** | ||
70 | - * Get the display name for this API, used on the "about" screen, must not return null | ||
71 | - */ | ||
72 | - public abstract String getDisplayName(); | ||
73 | - | ||
74 | - /** | ||
75 | - * Get the copyright text for this API, used on the "about" screen, must not return null | ||
76 | - */ | ||
77 | - public abstract String getCopyrightText(); | ||
78 | - | ||
79 | - /** | ||
80 | - * Get the main home page URL for this API, used on the "about" screen, must not return null | ||
81 | - */ | ||
82 | - public abstract URI getHomepage(); | ||
83 | - | ||
84 | - /** | ||
85 | - * If you wish to display a clickable twitter icon next to the API information in the "about" panel | ||
86 | - * then you must return values from this method as well as getTwitterAvatarResource() and | ||
87 | - * getTwitterAvatarCoords(). Return the twitter user name here. | ||
88 | - */ | ||
89 | - public abstract String getTwitterUserName(); | ||
90 | - | ||
91 | - /** | ||
92 | - * If you wish to display a clickable twitter icon next to the API information, return the icon | ||
93 | - * resource here. | ||
94 | - */ | ||
95 | - public abstract ResourceLocation getTwitterAvatarResource(); | ||
96 | - | ||
97 | - /** | ||
98 | - * If you wish to display a clickable twitter icon next to the API information, return the icon | ||
99 | - * coordinates here. | ||
100 | - */ | ||
101 | - public abstract Icon getTwitterAvatarCoords(); | ||
102 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import java.net.URI; | ||
4 | + | ||
5 | +import net.minecraft.util.ResourceLocation; | ||
6 | + | ||
7 | +import com.mumfrey.liteloader.util.render.Icon; | ||
8 | + | ||
9 | +/** | ||
10 | + * LiteLoader Extensible API - Branding Provider | ||
11 | + * | ||
12 | + * The Branding Provider manages loader branding alterations for a particular API. This is an optional | ||
13 | + * API component which allows an API to specify customisations and additions to the loader environment | ||
14 | + * in order to provide a more comfortable integration for the API. | ||
15 | + * | ||
16 | + * Since some branding options simply stack (like the API copyright notices for example) all APIs will | ||
17 | + * be allowed to supply this information, however other options (like the main logo image) can only be | ||
18 | + * set by one API. To determine which API should be used to set this information, the getPriority() | ||
19 | + * method will be called and used to sort branding providers by priority, with highest priority winning. | ||
20 | + * | ||
21 | + * All branding options may return a null/not set value, allowing a branding provider to only override | ||
22 | + * the branding features it wishes. Some options require a non-null value to be returned from a set of | ||
23 | + * methods in order to take effect. eg. the logo option requires non-null return values from BOTH the | ||
24 | + * getLogoResource() and getLogoCoords() methods. | ||
25 | + * | ||
26 | + * @author Adam Mummery-Smith | ||
27 | + */ | ||
28 | +public interface BrandingProvider extends CustomisationProvider | ||
29 | +{ | ||
30 | + /** | ||
31 | + * Get the priority of this provider, higher numbers take precedence. Some brandings can only be set | ||
32 | + * by one provider (eg. the main "about" logo) so the branding provider with the highest priority will | ||
33 | + * be the one which gets control of that feature. | ||
34 | + */ | ||
35 | + public abstract int getPriority(); | ||
36 | + | ||
37 | + /** | ||
38 | + * Get the primary branding colour for this API, the branding provider should return 0 if it | ||
39 | + * does not wish to override the branding colour. The branding colour is used for the mod list | ||
40 | + * entries and hyper-links within the about GUI panels, the colour returned should be fully opaque. | ||
41 | + */ | ||
42 | + public abstract int getBrandingColour(); | ||
43 | + | ||
44 | + /** | ||
45 | + * Get the resource to use for the main logo, the API with the highest priority gets to define the | ||
46 | + * logo, this method can return null if this API does not want to override the logo | ||
47 | + */ | ||
48 | + public abstract ResourceLocation getLogoResource(); | ||
49 | + | ||
50 | + /** | ||
51 | + * Gets the coordinates of the logo as an IIcon instance, only called if getLogoResource() returns | ||
52 | + * a non-null value and the logo will only be used if BOTH methods return a valid object. | ||
53 | + */ | ||
54 | + public abstract Icon getLogoCoords(); | ||
55 | + | ||
56 | + /** | ||
57 | + * Get the resource to use for the icon logo (the chicken in the default setup), the API with the | ||
58 | + * highest priority gets to define the icon logo, this method can return null if this API does not | ||
59 | + * want to override the icon | ||
60 | + */ | ||
61 | + public abstract ResourceLocation getIconResource(); | ||
62 | + | ||
63 | + /** | ||
64 | + * Gets the coordinates of the icon logo as an IIcon instance, only called if getIconResource() | ||
65 | + * returns a non-null value and the icon will only be used if BOTH methods return a valid object. | ||
66 | + */ | ||
67 | + public abstract Icon getIconCoords(); | ||
68 | + | ||
69 | + /** | ||
70 | + * Get the display name for this API, used on the "about" screen, must not return null | ||
71 | + */ | ||
72 | + public abstract String getDisplayName(); | ||
73 | + | ||
74 | + /** | ||
75 | + * Get the copyright text for this API, used on the "about" screen, must not return null | ||
76 | + */ | ||
77 | + public abstract String getCopyrightText(); | ||
78 | + | ||
79 | + /** | ||
80 | + * Get the main home page URL for this API, used on the "about" screen, must not return null | ||
81 | + */ | ||
82 | + public abstract URI getHomepage(); | ||
83 | + | ||
84 | + /** | ||
85 | + * If you wish to display a clickable twitter icon next to the API information in the "about" panel | ||
86 | + * then you must return values from this method as well as getTwitterAvatarResource() and | ||
87 | + * getTwitterAvatarCoords(). Return the twitter user name here. | ||
88 | + */ | ||
89 | + public abstract String getTwitterUserName(); | ||
90 | + | ||
91 | + /** | ||
92 | + * If you wish to display a clickable twitter icon next to the API information, return the icon | ||
93 | + * resource here. | ||
94 | + */ | ||
95 | + public abstract ResourceLocation getTwitterAvatarResource(); | ||
96 | + | ||
97 | + /** | ||
98 | + * If you wish to display a clickable twitter icon next to the API information, return the icon | ||
99 | + * coordinates here. | ||
100 | + */ | ||
101 | + public abstract Icon getTwitterAvatarCoords(); | ||
102 | +} |
java/common/com/mumfrey/liteloader/api/ContainerRegistry.java renamed to src/main/java/com/mumfrey/liteloader/api/ContainerRegistry.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import java.io.File; | ||
4 | -import java.util.Collection; | ||
5 | - | ||
6 | -import com.mumfrey.liteloader.core.ModInfo; | ||
7 | -import com.mumfrey.liteloader.interfaces.Loadable; | ||
8 | -import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
9 | -import com.mumfrey.liteloader.interfaces.TweakContainer; | ||
10 | - | ||
11 | -/** | ||
12 | - * Registry for enabled, disabled, injected and bad containers | ||
13 | - * | ||
14 | - * @author Adam Mummery-Smith | ||
15 | - */ | ||
16 | -public interface ContainerRegistry | ||
17 | -{ | ||
18 | - public enum DisabledReason | ||
19 | - { | ||
20 | - UNKNOWN("Container %s is could not be loaded for UNKNOWN reason"), | ||
21 | - USER_DISABLED("Container %s is disabled"), | ||
22 | - MISSING_DEPENDENCY("Container %s is missing one or more dependencies"), | ||
23 | - MISSING_API("Container %s is missing one or more required APIs"); | ||
24 | - | ||
25 | - private final String message; | ||
26 | - | ||
27 | - private DisabledReason(String message) | ||
28 | - { | ||
29 | - this.message = message; | ||
30 | - } | ||
31 | - | ||
32 | - public String getMessage(LoadableMod<?> container) | ||
33 | - { | ||
34 | - return String.format(this.message, container); | ||
35 | - } | ||
36 | - } | ||
37 | - | ||
38 | - /** | ||
39 | - * Register an enabled container, removes the container from the disabled containers list if present | ||
40 | - */ | ||
41 | - public abstract void registerEnabledContainer(LoadableMod<?> container); | ||
42 | - | ||
43 | - /** | ||
44 | - * Get all enabled containers | ||
45 | - */ | ||
46 | - public abstract Collection<? extends LoadableMod<?>> getEnabledContainers(); | ||
47 | - | ||
48 | - /** | ||
49 | - * Get a specific enabled container by id | ||
50 | - */ | ||
51 | - public abstract LoadableMod<?> getEnabledContainer(String identifier); | ||
52 | - | ||
53 | - /** | ||
54 | - * Register a disabled container | ||
55 | - */ | ||
56 | - public abstract void registerDisabledContainer(LoadableMod<?> container, DisabledReason reason); | ||
57 | - | ||
58 | - /** | ||
59 | - * Get all disabled containers | ||
60 | - */ | ||
61 | - public abstract Collection<? extends ModInfo<Loadable<?>>> getDisabledContainers(); | ||
62 | - | ||
63 | - /** | ||
64 | - * Check whether a specific container is registered as disabled | ||
65 | - */ | ||
66 | - public abstract boolean isDisabledContainer(LoadableMod<?> container); | ||
67 | - | ||
68 | - /** | ||
69 | - * Register a bad container | ||
70 | - */ | ||
71 | - public abstract void registerBadContainer(Loadable<?> container, String reason); | ||
72 | - | ||
73 | - /** | ||
74 | - * Get all bad containers | ||
75 | - */ | ||
76 | - public abstract Collection<? extends ModInfo<Loadable<?>>> getBadContainers(); | ||
77 | - | ||
78 | - /** | ||
79 | - * Register a candidate tweak container | ||
80 | - */ | ||
81 | - public abstract void registerTweakContainer(TweakContainer<File> container); | ||
82 | - | ||
83 | - /** | ||
84 | - * Get all registered tweak containers | ||
85 | - */ | ||
86 | - public abstract Collection<TweakContainer<File>> getTweakContainers(); | ||
87 | - | ||
88 | - /** | ||
89 | - * Register an injected tweak container | ||
90 | - */ | ||
91 | - public abstract void registerInjectedTweak(TweakContainer<File> container); | ||
92 | - | ||
93 | - /** | ||
94 | - * Get all injected tweak containers | ||
95 | - */ | ||
96 | - public abstract Collection<? extends ModInfo<Loadable<?>>> getInjectedTweaks(); | ||
97 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import java.io.File; | ||
4 | +import java.util.Collection; | ||
5 | + | ||
6 | +import com.mumfrey.liteloader.core.ModInfo; | ||
7 | +import com.mumfrey.liteloader.interfaces.Loadable; | ||
8 | +import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
9 | +import com.mumfrey.liteloader.interfaces.TweakContainer; | ||
10 | + | ||
11 | +/** | ||
12 | + * Registry for enabled, disabled, injected and bad containers | ||
13 | + * | ||
14 | + * @author Adam Mummery-Smith | ||
15 | + */ | ||
16 | +public interface ContainerRegistry | ||
17 | +{ | ||
18 | + public enum DisabledReason | ||
19 | + { | ||
20 | + UNKNOWN("Container %s is could not be loaded for UNKNOWN reason"), | ||
21 | + USER_DISABLED("Container %s is disabled"), | ||
22 | + MISSING_DEPENDENCY("Container %s is missing one or more dependencies"), | ||
23 | + MISSING_API("Container %s is missing one or more required APIs"); | ||
24 | + | ||
25 | + private final String message; | ||
26 | + | ||
27 | + private DisabledReason(String message) | ||
28 | + { | ||
29 | + this.message = message; | ||
30 | + } | ||
31 | + | ||
32 | + public String getMessage(LoadableMod<?> container) | ||
33 | + { | ||
34 | + return String.format(this.message, container); | ||
35 | + } | ||
36 | + } | ||
37 | + | ||
38 | + /** | ||
39 | + * Register an enabled container, removes the container from the disabled containers list if present | ||
40 | + */ | ||
41 | + public abstract void registerEnabledContainer(LoadableMod<?> container); | ||
42 | + | ||
43 | + /** | ||
44 | + * Get all enabled containers | ||
45 | + */ | ||
46 | + public abstract Collection<? extends LoadableMod<?>> getEnabledContainers(); | ||
47 | + | ||
48 | + /** | ||
49 | + * Get a specific enabled container by id | ||
50 | + */ | ||
51 | + public abstract LoadableMod<?> getEnabledContainer(String identifier); | ||
52 | + | ||
53 | + /** | ||
54 | + * Register a disabled container | ||
55 | + */ | ||
56 | + public abstract void registerDisabledContainer(LoadableMod<?> container, DisabledReason reason); | ||
57 | + | ||
58 | + /** | ||
59 | + * Get all disabled containers | ||
60 | + */ | ||
61 | + public abstract Collection<? extends ModInfo<Loadable<?>>> getDisabledContainers(); | ||
62 | + | ||
63 | + /** | ||
64 | + * Check whether a specific container is registered as disabled | ||
65 | + */ | ||
66 | + public abstract boolean isDisabledContainer(LoadableMod<?> container); | ||
67 | + | ||
68 | + /** | ||
69 | + * Register a bad container | ||
70 | + */ | ||
71 | + public abstract void registerBadContainer(Loadable<?> container, String reason); | ||
72 | + | ||
73 | + /** | ||
74 | + * Get all bad containers | ||
75 | + */ | ||
76 | + public abstract Collection<? extends ModInfo<Loadable<?>>> getBadContainers(); | ||
77 | + | ||
78 | + /** | ||
79 | + * Register a candidate tweak container | ||
80 | + */ | ||
81 | + public abstract void registerTweakContainer(TweakContainer<File> container); | ||
82 | + | ||
83 | + /** | ||
84 | + * Get all registered tweak containers | ||
85 | + */ | ||
86 | + public abstract Collection<TweakContainer<File>> getTweakContainers(); | ||
87 | + | ||
88 | + /** | ||
89 | + * Register an injected tweak container | ||
90 | + */ | ||
91 | + public abstract void registerInjectedTweak(TweakContainer<File> container); | ||
92 | + | ||
93 | + /** | ||
94 | + * Get all injected tweak containers | ||
95 | + */ | ||
96 | + public abstract Collection<? extends ModInfo<Loadable<?>>> getInjectedTweaks(); | ||
97 | +} |
java/common/com/mumfrey/liteloader/api/CoreProvider.java renamed to src/main/java/com/mumfrey/liteloader/api/CoreProvider.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import net.minecraft.network.INetHandler; | ||
4 | -import net.minecraft.network.play.server.S01PacketJoinGame; | ||
5 | - | ||
6 | -import com.mumfrey.liteloader.common.GameEngine; | ||
7 | -import com.mumfrey.liteloader.core.LiteLoaderMods; | ||
8 | - | ||
9 | -/** | ||
10 | - * LiteLoader Extensible API - API Core Provider | ||
11 | - * | ||
12 | - * Core Providers are objects whose lifecycle is equivalent to the run time of game and thus the entire | ||
13 | - * lifecycle of your API, they are instanced early in the loader startup process. CoreProviders can implement | ||
14 | - * any Observer interface as appropriate and are automatically considered when allocating Observers to | ||
15 | - * callback lists | ||
16 | - * | ||
17 | - * @author Adam Mummery-Smith | ||
18 | - */ | ||
19 | -public interface CoreProvider extends TickObserver, WorldObserver, ShutdownObserver, PostRenderObserver | ||
20 | -{ | ||
21 | - public abstract void onInit(); | ||
22 | - | ||
23 | - /** | ||
24 | - * During the postInit phase, the mods which were discovered during preInit phase are initialised and the | ||
25 | - * interfaces are allocated. This callback is invoked at the very start of the postInit phase, before mods | ||
26 | - * are initialised but after the point at which it is safe to assume it's ok to access game classes. This | ||
27 | - * is the first point at which the Minecraft game instance should be referenced. Be aware that certain game | ||
28 | - * classes (such as the EntityRenderer) are NOT initialised at this point. | ||
29 | - * | ||
30 | - * @param engine | ||
31 | - */ | ||
32 | - public abstract void onPostInit(GameEngine<?, ?> engine); | ||
33 | - | ||
34 | - /** | ||
35 | - * Once the mods are initialised and the interfaces have been allocated, this callback is invoked to allow | ||
36 | - * the CoreProvider to perform any tasks which should be performed in the postInit phase but after mods | ||
37 | - * have been initialised. | ||
38 | - * | ||
39 | - * @param mods | ||
40 | - */ | ||
41 | - public abstract void onPostInitComplete(LiteLoaderMods mods); | ||
42 | - | ||
43 | - /** | ||
44 | - * Called once startup is complete and the game loop begins running. This callback is invoked immediately | ||
45 | - * prior to the first "tick" event and immediately AFTER the the "late init" phase for mods (InitCompleteListener) | ||
46 | - */ | ||
47 | - public abstract void onStartupComplete(); | ||
48 | - | ||
49 | - /** | ||
50 | - * Called immediately on joining a single or multi-player world when the JoinGame packet is received. Only called on the client. | ||
51 | - * | ||
52 | - * @param netHandler | ||
53 | - * @param loginPacket | ||
54 | - */ | ||
55 | - public abstract void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket); | ||
56 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import net.minecraft.network.INetHandler; | ||
4 | +import net.minecraft.network.play.server.S01PacketJoinGame; | ||
5 | + | ||
6 | +import com.mumfrey.liteloader.common.GameEngine; | ||
7 | +import com.mumfrey.liteloader.core.LiteLoaderMods; | ||
8 | + | ||
9 | +/** | ||
10 | + * LiteLoader Extensible API - API Core Provider | ||
11 | + * | ||
12 | + * Core Providers are objects whose lifecycle is equivalent to the run time of game and thus the entire | ||
13 | + * lifecycle of your API, they are instanced early in the loader startup process. CoreProviders can implement | ||
14 | + * any Observer interface as appropriate and are automatically considered when allocating Observers to | ||
15 | + * callback lists | ||
16 | + * | ||
17 | + * @author Adam Mummery-Smith | ||
18 | + */ | ||
19 | +public interface CoreProvider extends TickObserver, WorldObserver, ShutdownObserver, PostRenderObserver | ||
20 | +{ | ||
21 | + public abstract void onInit(); | ||
22 | + | ||
23 | + /** | ||
24 | + * During the postInit phase, the mods which were discovered during preInit phase are initialised and the | ||
25 | + * interfaces are allocated. This callback is invoked at the very start of the postInit phase, before mods | ||
26 | + * are initialised but after the point at which it is safe to assume it's ok to access game classes. This | ||
27 | + * is the first point at which the Minecraft game instance should be referenced. Be aware that certain game | ||
28 | + * classes (such as the EntityRenderer) are NOT initialised at this point. | ||
29 | + * | ||
30 | + * @param engine | ||
31 | + */ | ||
32 | + public abstract void onPostInit(GameEngine<?, ?> engine); | ||
33 | + | ||
34 | + /** | ||
35 | + * Once the mods are initialised and the interfaces have been allocated, this callback is invoked to allow | ||
36 | + * the CoreProvider to perform any tasks which should be performed in the postInit phase but after mods | ||
37 | + * have been initialised. | ||
38 | + * | ||
39 | + * @param mods | ||
40 | + */ | ||
41 | + public abstract void onPostInitComplete(LiteLoaderMods mods); | ||
42 | + | ||
43 | + /** | ||
44 | + * Called once startup is complete and the game loop begins running. This callback is invoked immediately | ||
45 | + * prior to the first "tick" event and immediately AFTER the the "late init" phase for mods (InitCompleteListener) | ||
46 | + */ | ||
47 | + public abstract void onStartupComplete(); | ||
48 | + | ||
49 | + /** | ||
50 | + * Called immediately on joining a single or multi-player world when the JoinGame packet is received. Only called on the client. | ||
51 | + * | ||
52 | + * @param netHandler | ||
53 | + * @param loginPacket | ||
54 | + */ | ||
55 | + public abstract void onJoinGame(INetHandler netHandler, S01PacketJoinGame loginPacket); | ||
56 | +} |
java/common/com/mumfrey/liteloader/api/CustomisationProvider.java renamed to src/main/java/com/mumfrey/liteloader/api/CustomisationProvider.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * Base interface for loader customisation providers, has to be here so that we don't load branding provider classes too soon | ||
5 | - * | ||
6 | - * @author Adam Mummery-Smith | ||
7 | - */ | ||
8 | -public interface CustomisationProvider | ||
9 | -{ | ||
10 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * Base interface for loader customisation providers, has to be here so that we don't load branding provider classes too soon | ||
5 | + * | ||
6 | + * @author Adam Mummery-Smith | ||
7 | + */ | ||
8 | +public interface CustomisationProvider | ||
9 | +{ | ||
10 | +} |
java/common/com/mumfrey/liteloader/api/EnumerationObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/EnumerationObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import java.io.File; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.api.ContainerRegistry.DisabledReason; | ||
6 | -import com.mumfrey.liteloader.core.ModInfo; | ||
7 | -import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
8 | -import com.mumfrey.liteloader.interfaces.LoaderEnumerator; | ||
9 | -import com.mumfrey.liteloader.interfaces.TweakContainer; | ||
10 | - | ||
11 | -/** | ||
12 | - * LiteLoader Extensible API - Enumeration observer | ||
13 | - * | ||
14 | - * EnumerationObserver receive callbacks when mod containers are enumerated. Instances of this class MUST be returned from | ||
15 | - * getPreInitObservers in order to work | ||
16 | - * | ||
17 | - * @author Adam Mummery-Smith | ||
18 | - */ | ||
19 | -public interface EnumerationObserver extends Observer | ||
20 | -{ | ||
21 | - /** | ||
22 | - * Called upon registration for every discovered container which is enabled | ||
23 | - * | ||
24 | - * @param enumerator | ||
25 | - * @param container | ||
26 | - */ | ||
27 | - public abstract void onRegisterEnabledContainer(LoaderEnumerator enumerator, LoadableMod<?> container); | ||
28 | - | ||
29 | - /** | ||
30 | - * Called upon registration for every discovered container which is currently disabled, either because | ||
31 | - * | ||
32 | - * @param enumerator | ||
33 | - * @param container | ||
34 | - * @param reason | ||
35 | - */ | ||
36 | - public abstract void onRegisterDisabledContainer(LoaderEnumerator enumerator, LoadableMod<?> container, DisabledReason reason); | ||
37 | - | ||
38 | - /** | ||
39 | - * Called AFTER registration of an ENABLED container (eg. onRegisterEnabledContainer will be called first) if that container also | ||
40 | - * contains tweaks. | ||
41 | - * | ||
42 | - * @param enumerator | ||
43 | - * @param container | ||
44 | - */ | ||
45 | - public abstract void onRegisterTweakContainer(LoaderEnumerator enumerator, TweakContainer<File> container); | ||
46 | - | ||
47 | - /** | ||
48 | - * Called when a mod container is added to the pending mods list. This does not mean that the specific mod will actually be instanced since | ||
49 | - * the mod can still be disabled via the exclusion list (this is to allow entire containers to be disabled or just individual mods) and so | ||
50 | - * if you wish to observe actual mod instantiation you should still provide a {@link ResourceObserver}. However this event expresses a | ||
51 | - * declaration by the enumerator of an intention to load the specified mod. | ||
52 | - * | ||
53 | - * @param enumerator | ||
54 | - * @param mod | ||
55 | - */ | ||
56 | - public abstract void onModAdded(LoaderEnumerator enumerator, ModInfo<LoadableMod<?>> mod); | ||
57 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import java.io.File; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.api.ContainerRegistry.DisabledReason; | ||
6 | +import com.mumfrey.liteloader.core.ModInfo; | ||
7 | +import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
8 | +import com.mumfrey.liteloader.interfaces.LoaderEnumerator; | ||
9 | +import com.mumfrey.liteloader.interfaces.TweakContainer; | ||
10 | + | ||
11 | +/** | ||
12 | + * LiteLoader Extensible API - Enumeration observer | ||
13 | + * | ||
14 | + * EnumerationObserver receive callbacks when mod containers are enumerated. Instances of this class MUST be returned from | ||
15 | + * getPreInitObservers in order to work | ||
16 | + * | ||
17 | + * @author Adam Mummery-Smith | ||
18 | + */ | ||
19 | +public interface EnumerationObserver extends Observer | ||
20 | +{ | ||
21 | + /** | ||
22 | + * Called upon registration for every discovered container which is enabled | ||
23 | + * | ||
24 | + * @param enumerator | ||
25 | + * @param container | ||
26 | + */ | ||
27 | + public abstract void onRegisterEnabledContainer(LoaderEnumerator enumerator, LoadableMod<?> container); | ||
28 | + | ||
29 | + /** | ||
30 | + * Called upon registration for every discovered container which is currently disabled, either because | ||
31 | + * | ||
32 | + * @param enumerator | ||
33 | + * @param container | ||
34 | + * @param reason | ||
35 | + */ | ||
36 | + public abstract void onRegisterDisabledContainer(LoaderEnumerator enumerator, LoadableMod<?> container, DisabledReason reason); | ||
37 | + | ||
38 | + /** | ||
39 | + * Called AFTER registration of an ENABLED container (eg. onRegisterEnabledContainer will be called first) if that container also | ||
40 | + * contains tweaks. | ||
41 | + * | ||
42 | + * @param enumerator | ||
43 | + * @param container | ||
44 | + */ | ||
45 | + public abstract void onRegisterTweakContainer(LoaderEnumerator enumerator, TweakContainer<File> container); | ||
46 | + | ||
47 | + /** | ||
48 | + * Called when a mod container is added to the pending mods list. This does not mean that the specific mod will actually be instanced since | ||
49 | + * the mod can still be disabled via the exclusion list (this is to allow entire containers to be disabled or just individual mods) and so | ||
50 | + * if you wish to observe actual mod instantiation you should still provide a {@link ResourceObserver}. However this event expresses a | ||
51 | + * declaration by the enumerator of an intention to load the specified mod. | ||
52 | + * | ||
53 | + * @param enumerator | ||
54 | + * @param mod | ||
55 | + */ | ||
56 | + public abstract void onModAdded(LoaderEnumerator enumerator, ModInfo<LoadableMod<?>> mod); | ||
57 | +} |
java/common/com/mumfrey/liteloader/api/EnumeratorModule.java renamed to src/main/java/com/mumfrey/liteloader/api/EnumeratorModule.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import com.mumfrey.liteloader.interfaces.ModularEnumerator; | ||
4 | -import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
5 | -import com.mumfrey.liteloader.launch.LoaderProperties; | ||
6 | - | ||
7 | -import net.minecraft.launchwrapper.LaunchClassLoader; | ||
8 | - | ||
9 | -/** | ||
10 | - * LiteLoader Extensible API - Interface for objects which can enumerate mods in places | ||
11 | - * | ||
12 | - * EnumeratorModules plug into the LoaderEnumerator and are used to discover mod containers in various | ||
13 | - * locations, for example searching in a specific folder for particular files. | ||
14 | - * | ||
15 | - * @author Adam Mummery-Smith | ||
16 | - */ | ||
17 | -public interface EnumeratorModule | ||
18 | -{ | ||
19 | - /** | ||
20 | - * @param environment Loader environment | ||
21 | - * @param properties Loader properties | ||
22 | - */ | ||
23 | - public abstract void init(LoaderEnvironment environment, LoaderProperties properties); | ||
24 | - | ||
25 | - /** | ||
26 | - * @param environment Loader environment | ||
27 | - * @param properties Loader properties | ||
28 | - */ | ||
29 | - public abstract void writeSettings(LoaderEnvironment environment, LoaderProperties properties); | ||
30 | - | ||
31 | - /** | ||
32 | - * Find loadable mods in this enumerator's domain, the enumerator module should call back against the enumerator | ||
33 | - * itself to register containers it discovers using the registerModContainer() and registerTweakContainer() | ||
34 | - * callbacks. | ||
35 | - * | ||
36 | - * This method is called during loader PREINIT phase so **DO NOT USE ANY GAME CLASSES HERE**! | ||
37 | - * | ||
38 | - * @param enumerator | ||
39 | - * @param profile | ||
40 | - */ | ||
41 | - public abstract void enumerate(ModularEnumerator enumerator, String profile); | ||
42 | - | ||
43 | - /** | ||
44 | - * The enumerator module should inject (as required) any discovered containers into the classpath | ||
45 | - * | ||
46 | - * This method is called during the loader INIT phase | ||
47 | - * | ||
48 | - * @param enumerator | ||
49 | - * @param classLoader | ||
50 | - */ | ||
51 | - public abstract void injectIntoClassLoader(ModularEnumerator enumerator, LaunchClassLoader classLoader); | ||
52 | - | ||
53 | - /** | ||
54 | - * The enumerator module should callback against the enumerator using the registerModsFrom() callback to | ||
55 | - * register mods from discovered containers | ||
56 | - * | ||
57 | - * This method is called during the loader INIT phase | ||
58 | - * | ||
59 | - * @param enumerator | ||
60 | - * @param classLoader | ||
61 | - */ | ||
62 | - public abstract void registerMods(ModularEnumerator enumerator, LaunchClassLoader classLoader); | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import com.mumfrey.liteloader.interfaces.ModularEnumerator; | ||
4 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
5 | +import com.mumfrey.liteloader.launch.LoaderProperties; | ||
6 | + | ||
7 | +import net.minecraft.launchwrapper.LaunchClassLoader; | ||
8 | + | ||
9 | +/** | ||
10 | + * LiteLoader Extensible API - Interface for objects which can enumerate mods in places | ||
11 | + * | ||
12 | + * EnumeratorModules plug into the LoaderEnumerator and are used to discover mod containers in various | ||
13 | + * locations, for example searching in a specific folder for particular files. | ||
14 | + * | ||
15 | + * @author Adam Mummery-Smith | ||
16 | + */ | ||
17 | +public interface EnumeratorModule | ||
18 | +{ | ||
19 | + /** | ||
20 | + * @param environment Loader environment | ||
21 | + * @param properties Loader properties | ||
22 | + */ | ||
23 | + public abstract void init(LoaderEnvironment environment, LoaderProperties properties); | ||
24 | + | ||
25 | + /** | ||
26 | + * @param environment Loader environment | ||
27 | + * @param properties Loader properties | ||
28 | + */ | ||
29 | + public abstract void writeSettings(LoaderEnvironment environment, LoaderProperties properties); | ||
30 | + | ||
31 | + /** | ||
32 | + * Find loadable mods in this enumerator's domain, the enumerator module should call back against the enumerator | ||
33 | + * itself to register containers it discovers using the registerModContainer() and registerTweakContainer() | ||
34 | + * callbacks. | ||
35 | + * | ||
36 | + * This method is called during loader PREINIT phase so **DO NOT USE ANY GAME CLASSES HERE**! | ||
37 | + * | ||
38 | + * @param enumerator | ||
39 | + * @param profile | ||
40 | + */ | ||
41 | + public abstract void enumerate(ModularEnumerator enumerator, String profile); | ||
42 | + | ||
43 | + /** | ||
44 | + * The enumerator module should inject (as required) any discovered containers into the classpath | ||
45 | + * | ||
46 | + * This method is called during the loader INIT phase | ||
47 | + * | ||
48 | + * @param enumerator | ||
49 | + * @param classLoader | ||
50 | + */ | ||
51 | + public abstract void injectIntoClassLoader(ModularEnumerator enumerator, LaunchClassLoader classLoader); | ||
52 | + | ||
53 | + /** | ||
54 | + * The enumerator module should callback against the enumerator using the registerModsFrom() callback to | ||
55 | + * register mods from discovered containers | ||
56 | + * | ||
57 | + * This method is called during the loader INIT phase | ||
58 | + * | ||
59 | + * @param enumerator | ||
60 | + * @param classLoader | ||
61 | + */ | ||
62 | + public abstract void registerMods(ModularEnumerator enumerator, LaunchClassLoader classLoader); | ||
63 | } | 63 | } |
64 | \ No newline at end of file | 64 | \ No newline at end of file |
java/common/com/mumfrey/liteloader/api/EnumeratorPlugin.java renamed to src/main/java/com/mumfrey/liteloader/api/EnumeratorPlugin.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import java.util.List; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
6 | -import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
7 | -import com.mumfrey.liteloader.launch.LoaderProperties; | ||
8 | - | ||
9 | -/** | ||
10 | - * LiteLoader Extensible API - Interface for objects which can interact with the enumeration process, not yet available to APIs | ||
11 | - * | ||
12 | - * @author Adam Mummery-Smith | ||
13 | - */ | ||
14 | -public interface EnumeratorPlugin | ||
15 | -{ | ||
16 | - /** | ||
17 | - * Initialise this plugin | ||
18 | - */ | ||
19 | - public abstract void init(LoaderEnvironment environment, LoaderProperties properties); | ||
20 | - | ||
21 | - /** | ||
22 | - * Get classes in the supplied container | ||
23 | - * | ||
24 | - * @param container Container to inspect | ||
25 | - * @param classloader ClassLoader for this container | ||
26 | - * @param superClass Superclass the class must implement | ||
27 | - * @param supportedPrefixes Registered class prefixes | ||
28 | - * @return | ||
29 | - */ | ||
30 | - public abstract <T> List<Class<? extends T>> getClasses(LoadableMod<?> container, ClassLoader classloader, ModClassValidator validator); | ||
31 | - | ||
32 | - public abstract boolean checkEnabled(ContainerRegistry containers, LoadableMod<?> container); | ||
33 | - | ||
34 | - public abstract boolean checkDependencies(ContainerRegistry containers, LoadableMod<?> base); | ||
35 | - | ||
36 | - public abstract boolean checkAPIRequirements(ContainerRegistry containers, LoadableMod<?> container); | ||
37 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
6 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
7 | +import com.mumfrey.liteloader.launch.LoaderProperties; | ||
8 | + | ||
9 | +/** | ||
10 | + * LiteLoader Extensible API - Interface for objects which can interact with the enumeration process, not yet available to APIs | ||
11 | + * | ||
12 | + * @author Adam Mummery-Smith | ||
13 | + */ | ||
14 | +public interface EnumeratorPlugin | ||
15 | +{ | ||
16 | + /** | ||
17 | + * Initialise this plugin | ||
18 | + */ | ||
19 | + public abstract void init(LoaderEnvironment environment, LoaderProperties properties); | ||
20 | + | ||
21 | + /** | ||
22 | + * Get classes in the supplied container | ||
23 | + * | ||
24 | + * @param container Container to inspect | ||
25 | + * @param classloader ClassLoader for this container | ||
26 | + * @param superClass Superclass the class must implement | ||
27 | + * @param supportedPrefixes Registered class prefixes | ||
28 | + * @return | ||
29 | + */ | ||
30 | + public abstract <T> List<Class<? extends T>> getClasses(LoadableMod<?> container, ClassLoader classloader, ModClassValidator validator); | ||
31 | + | ||
32 | + public abstract boolean checkEnabled(ContainerRegistry containers, LoadableMod<?> container); | ||
33 | + | ||
34 | + public abstract boolean checkDependencies(ContainerRegistry containers, LoadableMod<?> base); | ||
35 | + | ||
36 | + public abstract boolean checkAPIRequirements(ContainerRegistry containers, LoadableMod<?> container); | ||
37 | +} |
java/common/com/mumfrey/liteloader/api/GenericObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/GenericObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * Generic Observer class, for Intra-API Observer inking | ||
5 | - * | ||
6 | - * @author Adam Mummery-Smith | ||
7 | - * | ||
8 | - * @param <T> Argument type for observable events | ||
9 | - */ | ||
10 | -public interface GenericObserver<T> extends Observer | ||
11 | -{ | ||
12 | - public abstract void onObservableEvent(String eventName, T... eventArgs) throws ClassCastException; | ||
13 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * Generic Observer class, for Intra-API Observer inking | ||
5 | + * | ||
6 | + * @author Adam Mummery-Smith | ||
7 | + * | ||
8 | + * @param <T> Argument type for observable events | ||
9 | + */ | ||
10 | +public interface GenericObserver<T> extends Observer | ||
11 | +{ | ||
12 | + public abstract void onObservableEvent(String eventName, T... eventArgs) throws ClassCastException; | ||
13 | +} |
java/common/com/mumfrey/liteloader/api/InterfaceObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/InterfaceObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * Observer for interface binding events | ||
5 | - * | ||
6 | - * @author Adam Mummery-Smith | ||
7 | - */ | ||
8 | -public interface InterfaceObserver extends Observer | ||
9 | -{ | ||
10 | - public void onRegisterListener(InterfaceProvider provider, Class<? extends Listener> interfaceType, Listener listener); | ||
11 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * Observer for interface binding events | ||
5 | + * | ||
6 | + * @author Adam Mummery-Smith | ||
7 | + */ | ||
8 | +public interface InterfaceObserver extends Observer | ||
9 | +{ | ||
10 | + public void onRegisterListener(InterfaceProvider provider, Class<? extends Listener> interfaceType, Listener listener); | ||
11 | +} |
java/common/com/mumfrey/liteloader/api/InterfaceProvider.java renamed to src/main/java/com/mumfrey/liteloader/api/InterfaceProvider.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; | ||
4 | - | ||
5 | -/** | ||
6 | - * LiteLoader Extensible API - Interface Provider | ||
7 | - * | ||
8 | - * InterfaceProviders are able to advertise and provide Listener interfaces which can be implemented | ||
9 | - * by mods or other Listener-derived classes | ||
10 | - * | ||
11 | - * @author Adam Mummery-Smith | ||
12 | - */ | ||
13 | -public interface InterfaceProvider | ||
14 | -{ | ||
15 | - /** | ||
16 | - * Base type of Listeners which can consume events provided by this provider | ||
17 | - */ | ||
18 | - public abstract Class<? extends Listener> getListenerBaseType(); | ||
19 | - | ||
20 | - /** | ||
21 | - * The provider should call back against the supplied delegate in order to advertise the interfaces | ||
22 | - * it provides. | ||
23 | - * | ||
24 | - * @param delegate | ||
25 | - */ | ||
26 | - public abstract void registerInterfaces(InterfaceRegistrationDelegate delegate); | ||
27 | - | ||
28 | - /** | ||
29 | - * Initialise this provider, called AFTER enumeration but before binding | ||
30 | - */ | ||
31 | - public abstract void initProvider(); | ||
32 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import com.mumfrey.liteloader.core.InterfaceRegistrationDelegate; | ||
4 | + | ||
5 | +/** | ||
6 | + * LiteLoader Extensible API - Interface Provider | ||
7 | + * | ||
8 | + * InterfaceProviders are able to advertise and provide Listener interfaces which can be implemented | ||
9 | + * by mods or other Listener-derived classes | ||
10 | + * | ||
11 | + * @author Adam Mummery-Smith | ||
12 | + */ | ||
13 | +public interface InterfaceProvider | ||
14 | +{ | ||
15 | + /** | ||
16 | + * Base type of Listeners which can consume events provided by this provider | ||
17 | + */ | ||
18 | + public abstract Class<? extends Listener> getListenerBaseType(); | ||
19 | + | ||
20 | + /** | ||
21 | + * The provider should call back against the supplied delegate in order to advertise the interfaces | ||
22 | + * it provides. | ||
23 | + * | ||
24 | + * @param delegate | ||
25 | + */ | ||
26 | + public abstract void registerInterfaces(InterfaceRegistrationDelegate delegate); | ||
27 | + | ||
28 | + /** | ||
29 | + * Initialise this provider, called AFTER enumeration but before binding | ||
30 | + */ | ||
31 | + public abstract void initProvider(); | ||
32 | +} |
java/common/com/mumfrey/liteloader/api/Listener.java renamed to src/main/java/com/mumfrey/liteloader/api/Listener.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * LiteLoader Extensible API - Listener is the base interface for (counter-intuitively) consumable Listener interfaces, in | ||
5 | - * that derived interfaces are consumable (from the point of view of the providers) but actual implementors consume the events | ||
6 | - * thus advertised by implementing those interfaces, making them themselves the consumers. Okay so that's probably pretty | ||
7 | - * confusing but I can't think of any better terminology so it's staying :) | ||
8 | - * | ||
9 | - * @author Adam Mummery-Smith | ||
10 | - */ | ||
11 | -public interface Listener | ||
12 | -{ | ||
13 | - /** | ||
14 | - * Get the display name | ||
15 | - * | ||
16 | - * @return display name | ||
17 | - */ | ||
18 | - public abstract String getName(); | ||
19 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * LiteLoader Extensible API - Listener is the base interface for (counter-intuitively) consumable Listener interfaces, in | ||
5 | + * that derived interfaces are consumable (from the point of view of the providers) but actual implementors consume the events | ||
6 | + * thus advertised by implementing those interfaces, making them themselves the consumers. Okay so that's probably pretty | ||
7 | + * confusing but I can't think of any better terminology so it's staying :) | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public interface Listener | ||
12 | +{ | ||
13 | + /** | ||
14 | + * Get the display name | ||
15 | + * | ||
16 | + * @return display name | ||
17 | + */ | ||
18 | + public abstract String getName(); | ||
19 | +} |
java/common/com/mumfrey/liteloader/api/LiteAPI.java renamed to src/main/java/com/mumfrey/liteloader/api/LiteAPI.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import java.util.List; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
6 | -import com.mumfrey.liteloader.launch.LoaderProperties; | ||
7 | - | ||
8 | -/** | ||
9 | - * LiteLoader Extensible API - main Mod API | ||
10 | - * | ||
11 | - * Implementors of this class don't really do anything except provide instances of other classes which make up the API proper. | ||
12 | - * Where possible, instance things as LATE as possible (eg. do not instance your CoreProviders in the constructor or init()) because | ||
13 | - * it's possible to screw up the game startup if things get loaded out of order, in general it's best to instance things only at | ||
14 | - * the earliest point in time at which they are needed. | ||
15 | - * | ||
16 | - * @author Adam Mummery-Smith | ||
17 | - */ | ||
18 | -public interface LiteAPI | ||
19 | -{ | ||
20 | - /** | ||
21 | - * Initialise this API, the API should do as little processing as possible here, but should also cache | ||
22 | - * the supplied environment and properties instances for later use | ||
23 | - * | ||
24 | - * @param environment | ||
25 | - * @param properties | ||
26 | - */ | ||
27 | - public abstract void init(LoaderEnvironment environment, LoaderProperties properties); | ||
28 | - | ||
29 | - /** | ||
30 | - * Get the identifier for this API, the identifier is used to retrieve the API and match it against specified mod API dependencies | ||
31 | - */ | ||
32 | - public abstract String getIdentifier(); | ||
33 | - | ||
34 | - /** | ||
35 | - * Get the friendly name of this API | ||
36 | - */ | ||
37 | - public abstract String getName(); | ||
38 | - | ||
39 | - /** | ||
40 | - * Get the human-readable version of the API, can be any value | ||
41 | - */ | ||
42 | - public abstract String getVersion(); | ||
43 | - | ||
44 | - /** | ||
45 | - * Get the revision number of this API. Unlike the version number, the revision number should only change when an incompatible | ||
46 | - * change is made to the APIs interfaces, it is also used when a mod specifies an API dependency using the api@revision syntax | ||
47 | - */ | ||
48 | - public abstract int getRevision(); | ||
49 | - | ||
50 | - /** | ||
51 | - * Should return an array of required transformer names, these transformers will be injected UPSTREAM. Can return null. | ||
52 | - */ | ||
53 | - public abstract String[] getRequiredTransformers(); | ||
54 | - | ||
55 | - /** | ||
56 | - * Should return an array of required transformer names, these transformers will be injected DOWNSTREAM. Can return null. | ||
57 | - */ | ||
58 | - public abstract String[] getRequiredDownstreamTransformers(); | ||
59 | - | ||
60 | - /** | ||
61 | - * Return a mod class prefix supported by this API, can return null if an API just wants to use "LiteMod" as a standard class name prefix | ||
62 | - */ | ||
63 | - public abstract String getModClassPrefix(); | ||
64 | - | ||
65 | - /** | ||
66 | - * Should return a list of Enumerator modules to be injected, can return null if the API doesn't want to inject any additonal modules | ||
67 | - */ | ||
68 | - public abstract List<EnumeratorModule> getEnumeratorModules(); | ||
69 | - | ||
70 | - /** | ||
71 | - * Should return a list of CoreProviders for this API, can return null if the API doesn't have any CoreProviders, (almost) guaranteed to only be called once | ||
72 | - */ | ||
73 | - public abstract List<CoreProvider> getCoreProviders(); | ||
74 | - | ||
75 | - /** | ||
76 | - * Should return a list of InterfaceProviders for this API, can return null if the API doesn't have any InterfaceProviders, (almost) guaranteed to only be called once | ||
77 | - */ | ||
78 | - public abstract List<InterfaceProvider> getInterfaceProviders(); | ||
79 | - | ||
80 | - /** | ||
81 | - * Should return a list of Observers which are safe to instantiate during pre-init, for example EnumerationObservers. Can return null if the API doesn't have any | ||
82 | - * Observers. | ||
83 | - */ | ||
84 | - public abstract List<Observer> getPreInitObservers(); | ||
85 | - | ||
86 | - /** | ||
87 | - * Should return a list of Observers for this API, can return null if the API doesn't have any Observers, (almost) guaranteed to only be called once. This list may | ||
88 | - * include Observers returned by getPreInitObservers if the observers are still required. | ||
89 | - */ | ||
90 | - public abstract List<Observer> getObservers(); | ||
91 | - | ||
92 | - /** | ||
93 | - * Get the customisation providers for this API, can return null | ||
94 | - */ | ||
95 | - public abstract List<CustomisationProvider> getCustomisationProviders(); | ||
96 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
6 | +import com.mumfrey.liteloader.launch.LoaderProperties; | ||
7 | + | ||
8 | +/** | ||
9 | + * LiteLoader Extensible API - main Mod API | ||
10 | + * | ||
11 | + * Implementors of this class don't really do anything except provide instances of other classes which make up the API proper. | ||
12 | + * Where possible, instance things as LATE as possible (eg. do not instance your CoreProviders in the constructor or init()) because | ||
13 | + * it's possible to screw up the game startup if things get loaded out of order, in general it's best to instance things only at | ||
14 | + * the earliest point in time at which they are needed. | ||
15 | + * | ||
16 | + * @author Adam Mummery-Smith | ||
17 | + */ | ||
18 | +public interface LiteAPI | ||
19 | +{ | ||
20 | + /** | ||
21 | + * Initialise this API, the API should do as little processing as possible here, but should also cache | ||
22 | + * the supplied environment and properties instances for later use | ||
23 | + * | ||
24 | + * @param environment | ||
25 | + * @param properties | ||
26 | + */ | ||
27 | + public abstract void init(LoaderEnvironment environment, LoaderProperties properties); | ||
28 | + | ||
29 | + /** | ||
30 | + * Get the identifier for this API, the identifier is used to retrieve the API and match it against specified mod API dependencies | ||
31 | + */ | ||
32 | + public abstract String getIdentifier(); | ||
33 | + | ||
34 | + /** | ||
35 | + * Get the friendly name of this API | ||
36 | + */ | ||
37 | + public abstract String getName(); | ||
38 | + | ||
39 | + /** | ||
40 | + * Get the human-readable version of the API, can be any value | ||
41 | + */ | ||
42 | + public abstract String getVersion(); | ||
43 | + | ||
44 | + /** | ||
45 | + * Get the revision number of this API. Unlike the version number, the revision number should only change when an incompatible | ||
46 | + * change is made to the APIs interfaces, it is also used when a mod specifies an API dependency using the api@revision syntax | ||
47 | + */ | ||
48 | + public abstract int getRevision(); | ||
49 | + | ||
50 | + /** | ||
51 | + * Should return an array of required transformer names, these transformers will be injected UPSTREAM. Can return null. | ||
52 | + */ | ||
53 | + public abstract String[] getRequiredTransformers(); | ||
54 | + | ||
55 | + /** | ||
56 | + * Should return an array of required transformer names, these transformers will be injected DOWNSTREAM. Can return null. | ||
57 | + */ | ||
58 | + public abstract String[] getRequiredDownstreamTransformers(); | ||
59 | + | ||
60 | + /** | ||
61 | + * Return a mod class prefix supported by this API, can return null if an API just wants to use "LiteMod" as a standard class name prefix | ||
62 | + */ | ||
63 | + public abstract String getModClassPrefix(); | ||
64 | + | ||
65 | + /** | ||
66 | + * Should return a list of Enumerator modules to be injected, can return null if the API doesn't want to inject any additonal modules | ||
67 | + */ | ||
68 | + public abstract List<EnumeratorModule> getEnumeratorModules(); | ||
69 | + | ||
70 | + /** | ||
71 | + * Should return a list of CoreProviders for this API, can return null if the API doesn't have any CoreProviders, (almost) guaranteed to only be called once | ||
72 | + */ | ||
73 | + public abstract List<CoreProvider> getCoreProviders(); | ||
74 | + | ||
75 | + /** | ||
76 | + * Should return a list of InterfaceProviders for this API, can return null if the API doesn't have any InterfaceProviders, (almost) guaranteed to only be called once | ||
77 | + */ | ||
78 | + public abstract List<InterfaceProvider> getInterfaceProviders(); | ||
79 | + | ||
80 | + /** | ||
81 | + * Should return a list of Observers which are safe to instantiate during pre-init, for example EnumerationObservers. Can return null if the API doesn't have any | ||
82 | + * Observers. | ||
83 | + */ | ||
84 | + public abstract List<Observer> getPreInitObservers(); | ||
85 | + | ||
86 | + /** | ||
87 | + * Should return a list of Observers for this API, can return null if the API doesn't have any Observers, (almost) guaranteed to only be called once. This list may | ||
88 | + * include Observers returned by getPreInitObservers if the observers are still required. | ||
89 | + */ | ||
90 | + public abstract List<Observer> getObservers(); | ||
91 | + | ||
92 | + /** | ||
93 | + * Get the customisation providers for this API, can return null | ||
94 | + */ | ||
95 | + public abstract List<CustomisationProvider> getCustomisationProviders(); | ||
96 | +} |
java/common/com/mumfrey/liteloader/api/ModClassValidator.java renamed to src/main/java/com/mumfrey/liteloader/api/ModClassValidator.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * Interface for object which validates whether a supplied mod class can be loaded | ||
5 | - * | ||
6 | - * @author Adam Mummery-Smith | ||
7 | - */ | ||
8 | -public interface ModClassValidator | ||
9 | -{ | ||
10 | - public abstract boolean validateName(String className); | ||
11 | - | ||
12 | - public abstract boolean validateClass(ClassLoader classLoader, Class<?> candidateClass); | ||
13 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * Interface for object which validates whether a supplied mod class can be loaded | ||
5 | + * | ||
6 | + * @author Adam Mummery-Smith | ||
7 | + */ | ||
8 | +public interface ModClassValidator | ||
9 | +{ | ||
10 | + public abstract boolean validateName(String className); | ||
11 | + | ||
12 | + public abstract boolean validateClass(ClassLoader classLoader, Class<?> candidateClass); | ||
13 | +} |
java/common/com/mumfrey/liteloader/api/ModInfoDecorator.java renamed to src/main/java/com/mumfrey/liteloader/api/ModInfoDecorator.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import java.util.List; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.core.ModInfo; | ||
6 | -import com.mumfrey.liteloader.util.render.IconTextured; | ||
7 | - | ||
8 | -/** | ||
9 | - * LiteLoader Extensible API - Branding Provider | ||
10 | - * | ||
11 | - * Decorator for ModInfo classes, to alter the appearance of ModInfo entries in the mod list | ||
12 | - * | ||
13 | - * @author Adam Mummery-Smith | ||
14 | - */ | ||
15 | -public interface ModInfoDecorator extends CustomisationProvider | ||
16 | -{ | ||
17 | - /** | ||
18 | - * Add icons to the mod list entry for this mod | ||
19 | - * | ||
20 | - * @param mod | ||
21 | - * @param icons | ||
22 | - */ | ||
23 | - public abstract void addIcons(ModInfo<?> mod, List<IconTextured> icons); | ||
24 | - | ||
25 | - /** | ||
26 | - * Allows this decorator to modify the status text for the specified mod, return null if no modification required | ||
27 | - * | ||
28 | - * @param statusText | ||
29 | - * @return new status text or NULL to indicate the text should remain default | ||
30 | - */ | ||
31 | - public abstract String modifyStatusText(ModInfo<?> mod, String statusText); | ||
32 | - | ||
33 | - /** | ||
34 | - * Allow decorators to draw custom content on the mod list entries | ||
35 | - * | ||
36 | - * @param mouseX Mouse X position | ||
37 | - * @param mouseY Mouse Y position | ||
38 | - * @param partialTicks | ||
39 | - * @param xPosition Panel X position | ||
40 | - * @param yPosition Panel Y position | ||
41 | - * @param width Panel width | ||
42 | - * @param selected Panel height | ||
43 | - * @param mod ModInfo | ||
44 | - * @param gradientColour | ||
45 | - * @param titleColour | ||
46 | - * @param statusColour | ||
47 | - */ | ||
48 | - public abstract void onDrawListEntry(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, int height, boolean selected, ModInfo<?> mod, int gradientColour, int titleColour, int statusColour); | ||
49 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.core.ModInfo; | ||
6 | +import com.mumfrey.liteloader.util.render.IconTextured; | ||
7 | + | ||
8 | +/** | ||
9 | + * LiteLoader Extensible API - Branding Provider | ||
10 | + * | ||
11 | + * Decorator for ModInfo classes, to alter the appearance of ModInfo entries in the mod list | ||
12 | + * | ||
13 | + * @author Adam Mummery-Smith | ||
14 | + */ | ||
15 | +public interface ModInfoDecorator extends CustomisationProvider | ||
16 | +{ | ||
17 | + /** | ||
18 | + * Add icons to the mod list entry for this mod | ||
19 | + * | ||
20 | + * @param mod | ||
21 | + * @param icons | ||
22 | + */ | ||
23 | + public abstract void addIcons(ModInfo<?> mod, List<IconTextured> icons); | ||
24 | + | ||
25 | + /** | ||
26 | + * Allows this decorator to modify the status text for the specified mod, return null if no modification required | ||
27 | + * | ||
28 | + * @param statusText | ||
29 | + * @return new status text or NULL to indicate the text should remain default | ||
30 | + */ | ||
31 | + public abstract String modifyStatusText(ModInfo<?> mod, String statusText); | ||
32 | + | ||
33 | + /** | ||
34 | + * Allow decorators to draw custom content on the mod list entries | ||
35 | + * | ||
36 | + * @param mouseX Mouse X position | ||
37 | + * @param mouseY Mouse Y position | ||
38 | + * @param partialTicks | ||
39 | + * @param xPosition Panel X position | ||
40 | + * @param yPosition Panel Y position | ||
41 | + * @param width Panel width | ||
42 | + * @param selected Panel height | ||
43 | + * @param mod ModInfo | ||
44 | + * @param gradientColour | ||
45 | + * @param titleColour | ||
46 | + * @param statusColour | ||
47 | + */ | ||
48 | + public abstract void onDrawListEntry(int mouseX, int mouseY, float partialTicks, int xPosition, int yPosition, int width, int height, boolean selected, ModInfo<?> mod, int gradientColour, int titleColour, int statusColour); | ||
49 | +} |
java/common/com/mumfrey/liteloader/api/ModLoadObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/ModLoadObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import java.io.File; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.LiteMod; | ||
6 | -import com.mumfrey.liteloader.core.ModInfo; | ||
7 | -import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
8 | - | ||
9 | -/** | ||
10 | - * LiteLoader Extensible API - Mod Load Observer | ||
11 | - * | ||
12 | - * ModLoadObservers receive callbacks when mod loading events are occurring, prior to init and other | ||
13 | - * loader-managed processes | ||
14 | - * | ||
15 | - * @author Adam Mummery-Smith | ||
16 | - */ | ||
17 | -public interface ModLoadObserver extends Observer | ||
18 | -{ | ||
19 | - /** | ||
20 | - * Called immediately after a mod instance is created, throw an exception from this method in | ||
21 | - * order to prevent further initialisation | ||
22 | - */ | ||
23 | - public abstract void onModLoaded(LiteMod mod); | ||
24 | - | ||
25 | - /** | ||
26 | - * Called after a mod is instanced and has been successfully added to the active mods list | ||
27 | - * | ||
28 | - * @param handle Mod handle | ||
29 | - */ | ||
30 | - public abstract void onPostModLoaded(ModInfo<LoadableMod<?>> handle); | ||
31 | - | ||
32 | - /** | ||
33 | - * Called if mod loading fails | ||
34 | - * | ||
35 | - * @param container | ||
36 | - * @param identifier | ||
37 | - * @param reason | ||
38 | - * @param th | ||
39 | - */ | ||
40 | - public abstract void onModLoadFailed(LoadableMod<?> container, String identifier, String reason, Throwable th); | ||
41 | - | ||
42 | - /** | ||
43 | - * Called before a mod's init() method is called | ||
44 | - * | ||
45 | - * @param mod | ||
46 | - */ | ||
47 | - public abstract void onPreInitMod(LiteMod mod); | ||
48 | - | ||
49 | - /** | ||
50 | - * Called after a mod's init() method is called | ||
51 | - * | ||
52 | - * @param mod | ||
53 | - */ | ||
54 | - public abstract void onPostInitMod(LiteMod mod); | ||
55 | - | ||
56 | - /** | ||
57 | - * Called when migrating mod config from version to version | ||
58 | - * | ||
59 | - * @param mod | ||
60 | - * @param newConfigPath | ||
61 | - * @param oldConfigPath | ||
62 | - */ | ||
63 | - public abstract void onMigrateModConfig(LiteMod mod, File newConfigPath, File oldConfigPath); | ||
64 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import java.io.File; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.LiteMod; | ||
6 | +import com.mumfrey.liteloader.core.ModInfo; | ||
7 | +import com.mumfrey.liteloader.interfaces.LoadableMod; | ||
8 | + | ||
9 | +/** | ||
10 | + * LiteLoader Extensible API - Mod Load Observer | ||
11 | + * | ||
12 | + * ModLoadObservers receive callbacks when mod loading events are occurring, prior to init and other | ||
13 | + * loader-managed processes | ||
14 | + * | ||
15 | + * @author Adam Mummery-Smith | ||
16 | + */ | ||
17 | +public interface ModLoadObserver extends Observer | ||
18 | +{ | ||
19 | + /** | ||
20 | + * Called immediately after a mod instance is created, throw an exception from this method in | ||
21 | + * order to prevent further initialisation | ||
22 | + */ | ||
23 | + public abstract void onModLoaded(LiteMod mod); | ||
24 | + | ||
25 | + /** | ||
26 | + * Called after a mod is instanced and has been successfully added to the active mods list | ||
27 | + * | ||
28 | + * @param handle Mod handle | ||
29 | + */ | ||
30 | + public abstract void onPostModLoaded(ModInfo<LoadableMod<?>> handle); | ||
31 | + | ||
32 | + /** | ||
33 | + * Called if mod loading fails | ||
34 | + * | ||
35 | + * @param container | ||
36 | + * @param identifier | ||
37 | + * @param reason | ||
38 | + * @param th | ||
39 | + */ | ||
40 | + public abstract void onModLoadFailed(LoadableMod<?> container, String identifier, String reason, Throwable th); | ||
41 | + | ||
42 | + /** | ||
43 | + * Called before a mod's init() method is called | ||
44 | + * | ||
45 | + * @param mod | ||
46 | + */ | ||
47 | + public abstract void onPreInitMod(LiteMod mod); | ||
48 | + | ||
49 | + /** | ||
50 | + * Called after a mod's init() method is called | ||
51 | + * | ||
52 | + * @param mod | ||
53 | + */ | ||
54 | + public abstract void onPostInitMod(LiteMod mod); | ||
55 | + | ||
56 | + /** | ||
57 | + * Called when migrating mod config from version to version | ||
58 | + * | ||
59 | + * @param mod | ||
60 | + * @param newConfigPath | ||
61 | + * @param oldConfigPath | ||
62 | + */ | ||
63 | + public abstract void onMigrateModConfig(LiteMod mod, File newConfigPath, File oldConfigPath); | ||
64 | +} |
java/common/com/mumfrey/liteloader/api/Observer.java renamed to src/main/java/com/mumfrey/liteloader/api/Observer.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * LiteLoader Extensible API - Observer base interface | ||
5 | - * | ||
6 | - * Observers are essentially "core listeners" which are objects which make up the core a of a particular API implementation | ||
7 | - * and sink events generated by the Loader or by other observable components. See the derived interfaces for more detail. | ||
8 | - * | ||
9 | - * @author Adam Mummery-Smith | ||
10 | - */ | ||
11 | -public interface Observer | ||
12 | -{ | ||
13 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * LiteLoader Extensible API - Observer base interface | ||
5 | + * | ||
6 | + * Observers are essentially "core listeners" which are objects which make up the core a of a particular API implementation | ||
7 | + * and sink events generated by the Loader or by other observable components. See the derived interfaces for more detail. | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public interface Observer | ||
12 | +{ | ||
13 | +} |
java/common/com/mumfrey/liteloader/api/PostRenderObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/PostRenderObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * LiteLoader Extensible API - Post-render Observers | ||
5 | - * | ||
6 | - * PostRenderObservers receive the onPostRender event every frame, allowing "draw-on-top" behaviour for API components | ||
7 | - * | ||
8 | - * @author Adam Mummery-Smith | ||
9 | - */ | ||
10 | -public interface PostRenderObserver extends Observer | ||
11 | -{ | ||
12 | - public abstract void onPostRender(int mouseX, int mouseY, float partialTicks); | ||
13 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * LiteLoader Extensible API - Post-render Observers | ||
5 | + * | ||
6 | + * PostRenderObservers receive the onPostRender event every frame, allowing "draw-on-top" behaviour for API components | ||
7 | + * | ||
8 | + * @author Adam Mummery-Smith | ||
9 | + */ | ||
10 | +public interface PostRenderObserver extends Observer | ||
11 | +{ | ||
12 | + public abstract void onPostRender(int mouseX, int mouseY, float partialTicks); | ||
13 | +} |
java/common/com/mumfrey/liteloader/api/ShutdownObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/ShutdownObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * LiteLoader Extensible API - ShutDownObserver | ||
5 | - * | ||
6 | - * ShutDownObservers receive an event when the game is shutting down due to a user request. They do NOT receive the | ||
7 | - * callback when the VM is terminating, use a regular VM shutdownhook for that. | ||
8 | - * | ||
9 | - * @author Adam Mummery-Smith | ||
10 | - */ | ||
11 | -public interface ShutdownObserver extends Observer | ||
12 | -{ | ||
13 | - public abstract void onShutDown(); | ||
14 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * LiteLoader Extensible API - ShutDownObserver | ||
5 | + * | ||
6 | + * ShutDownObservers receive an event when the game is shutting down due to a user request. They do NOT receive the | ||
7 | + * callback when the VM is terminating, use a regular VM shutdownhook for that. | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public interface ShutdownObserver extends Observer | ||
12 | +{ | ||
13 | + public abstract void onShutDown(); | ||
14 | +} |
java/common/com/mumfrey/liteloader/api/TickObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/TickObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * LiteLoader Extensible API - TickObserver | ||
5 | - * | ||
6 | - * Received a callback every tick (duh) PRIOR to the mod tick event | ||
7 | - * | ||
8 | - * @author Adam Mummery-Smith | ||
9 | - */ | ||
10 | -public interface TickObserver extends Observer | ||
11 | -{ | ||
12 | - public abstract void onTick(boolean clock, float partialTicks, boolean inGame); | ||
13 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * LiteLoader Extensible API - TickObserver | ||
5 | + * | ||
6 | + * Received a callback every tick (duh) PRIOR to the mod tick event | ||
7 | + * | ||
8 | + * @author Adam Mummery-Smith | ||
9 | + */ | ||
10 | +public interface TickObserver extends Observer | ||
11 | +{ | ||
12 | + public abstract void onTick(boolean clock, float partialTicks, boolean inGame); | ||
13 | +} |
java/common/com/mumfrey/liteloader/api/TranslationProvider.java renamed to src/main/java/com/mumfrey/liteloader/api/TranslationProvider.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -/** | ||
4 | - * Interface for providers which can handle translation requests | ||
5 | - * | ||
6 | - * @author Adam Mummery-Smith | ||
7 | - */ | ||
8 | -public interface TranslationProvider extends CustomisationProvider | ||
9 | -{ | ||
10 | - /** | ||
11 | - * Translate the supplied key or return NULL if the provider has no translation for the specified key | ||
12 | - */ | ||
13 | - public abstract String translate(String key, Object... args); | ||
14 | - | ||
15 | - /** | ||
16 | - * Translate the supplied key to the specified locale, or return NULL if the provider has no translation for this key | ||
17 | - */ | ||
18 | - public abstract String translate(String locale, String key, Object... args); | ||
19 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +/** | ||
4 | + * Interface for providers which can handle translation requests | ||
5 | + * | ||
6 | + * @author Adam Mummery-Smith | ||
7 | + */ | ||
8 | +public interface TranslationProvider extends CustomisationProvider | ||
9 | +{ | ||
10 | + /** | ||
11 | + * Translate the supplied key or return NULL if the provider has no translation for the specified key | ||
12 | + */ | ||
13 | + public abstract String translate(String key, Object... args); | ||
14 | + | ||
15 | + /** | ||
16 | + * Translate the supplied key to the specified locale, or return NULL if the provider has no translation for this key | ||
17 | + */ | ||
18 | + public abstract String translate(String locale, String key, Object... args); | ||
19 | +} |
java/common/com/mumfrey/liteloader/api/WorldObserver.java renamed to src/main/java/com/mumfrey/liteloader/api/WorldObserver.java
1 | -package com.mumfrey.liteloader.api; | ||
2 | - | ||
3 | -import net.minecraft.world.World; | ||
4 | - | ||
5 | -/** | ||
6 | - * LiteLoader Extensible API - WorldObserver | ||
7 | - * | ||
8 | - * WorldObservers receive a callback when the Minecraft.theWorld reference changes, beware the value is allowed | ||
9 | - * to be null | ||
10 | - * | ||
11 | - * @author Adam Mummery-Smith | ||
12 | - */ | ||
13 | -public interface WorldObserver extends Observer | ||
14 | -{ | ||
15 | - public abstract void onWorldChanged(World world); | ||
16 | -} | 1 | +package com.mumfrey.liteloader.api; |
2 | + | ||
3 | +import net.minecraft.world.World; | ||
4 | + | ||
5 | +/** | ||
6 | + * LiteLoader Extensible API - WorldObserver | ||
7 | + * | ||
8 | + * WorldObservers receive a callback when the Minecraft.theWorld reference changes, beware the value is allowed | ||
9 | + * to be null | ||
10 | + * | ||
11 | + * @author Adam Mummery-Smith | ||
12 | + */ | ||
13 | +public interface WorldObserver extends Observer | ||
14 | +{ | ||
15 | + public abstract void onWorldChanged(World world); | ||
16 | +} |
java/common/com/mumfrey/liteloader/api/exceptions/APIException.java renamed to src/main/java/com/mumfrey/liteloader/api/exceptions/APIException.java
1 | -package com.mumfrey.liteloader.api.exceptions; | ||
2 | - | ||
3 | -public abstract class APIException extends RuntimeException | ||
4 | -{ | ||
5 | - private static final long serialVersionUID = 1L; | ||
6 | - | ||
7 | - public APIException() | ||
8 | - { | ||
9 | - super(); | ||
10 | - } | ||
11 | - | ||
12 | - public APIException(String message) | ||
13 | - { | ||
14 | - super(message); | ||
15 | - } | ||
16 | - | ||
17 | - public APIException(Throwable cause) | ||
18 | - { | ||
19 | - super(cause); | ||
20 | - } | ||
21 | - | ||
22 | - public APIException(String message, Throwable cause) | ||
23 | - { | ||
24 | - super(message, cause); | ||
25 | - } | ||
26 | - | 1 | +package com.mumfrey.liteloader.api.exceptions; |
2 | + | ||
3 | +public abstract class APIException extends RuntimeException | ||
4 | +{ | ||
5 | + private static final long serialVersionUID = 1L; | ||
6 | + | ||
7 | + public APIException() | ||
8 | + { | ||
9 | + super(); | ||
10 | + } | ||
11 | + | ||
12 | + public APIException(String message) | ||
13 | + { | ||
14 | + super(message); | ||
15 | + } | ||
16 | + | ||
17 | + public APIException(Throwable cause) | ||
18 | + { | ||
19 | + super(cause); | ||
20 | + } | ||
21 | + | ||
22 | + public APIException(String message, Throwable cause) | ||
23 | + { | ||
24 | + super(message, cause); | ||
25 | + } | ||
26 | + | ||
27 | } | 27 | } |
28 | \ No newline at end of file | 28 | \ No newline at end of file |
java/common/com/mumfrey/liteloader/api/exceptions/InvalidAPIException.java renamed to src/main/java/com/mumfrey/liteloader/api/exceptions/InvalidAPIException.java
1 | -package com.mumfrey.liteloader.api.exceptions; | ||
2 | - | ||
3 | -public class InvalidAPIException extends APIException | ||
4 | -{ | ||
5 | - private static final long serialVersionUID = 1L; | ||
6 | - | ||
7 | - public InvalidAPIException(String message, Throwable cause) | ||
8 | - { | ||
9 | - super(message, cause); | ||
10 | - } | ||
11 | - | ||
12 | - public InvalidAPIException(String message) | ||
13 | - { | ||
14 | - super(message); | ||
15 | - } | ||
16 | -} | 1 | +package com.mumfrey.liteloader.api.exceptions; |
2 | + | ||
3 | +public class InvalidAPIException extends APIException | ||
4 | +{ | ||
5 | + private static final long serialVersionUID = 1L; | ||
6 | + | ||
7 | + public InvalidAPIException(String message, Throwable cause) | ||
8 | + { | ||
9 | + super(message, cause); | ||
10 | + } | ||
11 | + | ||
12 | + public InvalidAPIException(String message) | ||
13 | + { | ||
14 | + super(message); | ||
15 | + } | ||
16 | +} |
java/common/com/mumfrey/liteloader/api/exceptions/InvalidAPIStateException.java renamed to src/main/java/com/mumfrey/liteloader/api/exceptions/InvalidAPIStateException.java
1 | -package com.mumfrey.liteloader.api.exceptions; | ||
2 | - | ||
3 | -public class InvalidAPIStateException extends APIException | ||
4 | -{ | ||
5 | - private static final long serialVersionUID = 1L; | ||
6 | - | ||
7 | - public InvalidAPIStateException(String message) | ||
8 | - { | ||
9 | - super(message); | ||
10 | - } | ||
11 | -} | 1 | +package com.mumfrey.liteloader.api.exceptions; |
2 | + | ||
3 | +public class InvalidAPIStateException extends APIException | ||
4 | +{ | ||
5 | + private static final long serialVersionUID = 1L; | ||
6 | + | ||
7 | + public InvalidAPIStateException(String message) | ||
8 | + { | ||
9 | + super(message); | ||
10 | + } | ||
11 | +} |
java/common/com/mumfrey/liteloader/api/exceptions/InvalidProviderException.java renamed to src/main/java/com/mumfrey/liteloader/api/exceptions/InvalidProviderException.java
1 | -package com.mumfrey.liteloader.api.exceptions; | ||
2 | - | ||
3 | -public class InvalidProviderException extends APIException | ||
4 | -{ | ||
5 | - private static final long serialVersionUID = 1L; | ||
6 | - | ||
7 | - public InvalidProviderException(String message, Throwable cause) | ||
8 | - { | ||
9 | - super(message, cause); | ||
10 | - } | ||
11 | - | ||
12 | - public InvalidProviderException(String message) | ||
13 | - { | ||
14 | - super(message); | ||
15 | - } | ||
16 | -} | 1 | +package com.mumfrey.liteloader.api.exceptions; |
2 | + | ||
3 | +public class InvalidProviderException extends APIException | ||
4 | +{ | ||
5 | + private static final long serialVersionUID = 1L; | ||
6 | + | ||
7 | + public InvalidProviderException(String message, Throwable cause) | ||
8 | + { | ||
9 | + super(message, cause); | ||
10 | + } | ||
11 | + | ||
12 | + public InvalidProviderException(String message) | ||
13 | + { | ||
14 | + super(message); | ||
15 | + } | ||
16 | +} |
java/common/com/mumfrey/liteloader/api/manager/APIAdapter.java renamed to src/main/java/com/mumfrey/liteloader/api/manager/APIAdapter.java
1 | -package com.mumfrey.liteloader.api.manager; | ||
2 | - | ||
3 | -import java.util.List; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.api.CoreProvider; | ||
6 | -import com.mumfrey.liteloader.api.LiteAPI; | ||
7 | -import com.mumfrey.liteloader.api.Observer; | ||
8 | -import com.mumfrey.liteloader.interfaces.InterfaceRegistry; | ||
9 | - | ||
10 | -/** | ||
11 | - * API Adapter provides convenience methods for invoking actions on ALL registered APIs | ||
12 | - * | ||
13 | - * @author Adam Mummery-Smith | ||
14 | - */ | ||
15 | -public interface APIAdapter | ||
16 | -{ | ||
17 | - /** | ||
18 | - * Aggregate and return required transformers from all registered APIs | ||
19 | - */ | ||
20 | - public abstract List<String> getRequiredTransformers(); | ||
21 | - | ||
22 | - /** | ||
23 | - * Aggregate and return required downstream transformers from all registered APIs | ||
24 | - */ | ||
25 | - public abstract List<String> getRequiredDownstreamTransformers(); | ||
26 | - | ||
27 | - /** | ||
28 | - * Register interfaces from all registered APIs with the specified registry | ||
29 | - */ | ||
30 | - public abstract void registerInterfaces(InterfaceRegistry interfaceManager); | ||
31 | - | ||
32 | - /** | ||
33 | - * Get the CoreProviders for the specified API. Consuming classes should call this method instead of calling API::getCoreProviders() | ||
34 | - * directly since getCoreProviders() should only be invoked once and the resulting collection is cached by the API Adapter | ||
35 | - */ | ||
36 | - public abstract List<CoreProvider> getCoreProviders(); | ||
37 | - | ||
38 | - /** | ||
39 | - * Get the observers for the specified API. Consuming classes should call this method instead of calling API::getObservers() directly | ||
40 | - * since getObservers() should only be invoked once and the resulting list is cached by the API Adapter | ||
41 | - * | ||
42 | - * @param api API to get observers for | ||
43 | - */ | ||
44 | - public abstract List<? extends Observer> getObservers(LiteAPI api); | ||
45 | - | ||
46 | - /** | ||
47 | - * Get the observers for the specified API which implement the specified Observer interface. Always returns a valid list (even if | ||
48 | - * empty) and doesn't return null. | ||
49 | - * | ||
50 | - * @param api API to get observers for | ||
51 | - * @param observerType type of observer to search for | ||
52 | - */ | ||
53 | - public abstract <T extends Observer> List<T> getObservers(LiteAPI api, Class<T> observerType); | ||
54 | - | ||
55 | - /** | ||
56 | - * Get the observers for all registered APIs which implement the specified Observer interface. Always returns a valid list (even if | ||
57 | - * empty) and doesn't return null. Also includes core providers | ||
58 | - * | ||
59 | - * @param observerType type of observer to search for | ||
60 | - */ | ||
61 | - public abstract <T extends Observer> List<T> getAllObservers(Class<T> observerType); | ||
62 | - | ||
63 | - /** | ||
64 | - * @param api | ||
65 | - */ | ||
66 | - public abstract List<? extends Observer> getPreInitObservers(LiteAPI api); | ||
67 | - | ||
68 | - /** | ||
69 | - * @param observerType | ||
70 | - */ | ||
71 | - public abstract <T extends Observer> List<T> getPreInitObservers(Class<T> observerType); | ||
72 | -} | 1 | +package com.mumfrey.liteloader.api.manager; |
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.api.CoreProvider; | ||
6 | +import com.mumfrey.liteloader.api.LiteAPI; | ||
7 | +import com.mumfrey.liteloader.api.Observer; | ||
8 | +import com.mumfrey.liteloader.interfaces.InterfaceRegistry; | ||
9 | + | ||
10 | +/** | ||
11 | + * API Adapter provides convenience methods for invoking actions on ALL registered APIs | ||
12 | + * | ||
13 | + * @author Adam Mummery-Smith | ||
14 | + */ | ||
15 | +public interface APIAdapter | ||
16 | +{ | ||
17 | + /** | ||
18 | + * Aggregate and return required transformers from all registered APIs | ||
19 | + */ | ||
20 | + public abstract List<String> getRequiredTransformers(); | ||
21 | + | ||
22 | + /** | ||
23 | + * Aggregate and return required downstream transformers from all registered APIs | ||
24 | + */ | ||
25 | + public abstract List<String> getRequiredDownstreamTransformers(); | ||
26 | + | ||
27 | + /** | ||
28 | + * Register interfaces from all registered APIs with the specified registry | ||
29 | + */ | ||
30 | + public abstract void registerInterfaces(InterfaceRegistry interfaceManager); | ||
31 | + | ||
32 | + /** | ||
33 | + * Get the CoreProviders for the specified API. Consuming classes should call this method instead of calling API::getCoreProviders() | ||
34 | + * directly since getCoreProviders() should only be invoked once and the resulting collection is cached by the API Adapter | ||
35 | + */ | ||
36 | + public abstract List<CoreProvider> getCoreProviders(); | ||
37 | + | ||
38 | + /** | ||
39 | + * Get the observers for the specified API. Consuming classes should call this method instead of calling API::getObservers() directly | ||
40 | + * since getObservers() should only be invoked once and the resulting list is cached by the API Adapter | ||
41 | + * | ||
42 | + * @param api API to get observers for | ||
43 | + */ | ||
44 | + public abstract List<? extends Observer> getObservers(LiteAPI api); | ||
45 | + | ||
46 | + /** | ||
47 | + * Get the observers for the specified API which implement the specified Observer interface. Always returns a valid list (even if | ||
48 | + * empty) and doesn't return null. | ||
49 | + * | ||
50 | + * @param api API to get observers for | ||
51 | + * @param observerType type of observer to search for | ||
52 | + */ | ||
53 | + public abstract <T extends Observer> List<T> getObservers(LiteAPI api, Class<T> observerType); | ||
54 | + | ||
55 | + /** | ||
56 | + * Get the observers for all registered APIs which implement the specified Observer interface. Always returns a valid list (even if | ||
57 | + * empty) and doesn't return null. Also includes core providers | ||
58 | + * | ||
59 | + * @param observerType type of observer to search for | ||
60 | + */ | ||
61 | + public abstract <T extends Observer> List<T> getAllObservers(Class<T> observerType); | ||
62 | + | ||
63 | + /** | ||
64 | + * @param api | ||
65 | + */ | ||
66 | + public abstract List<? extends Observer> getPreInitObservers(LiteAPI api); | ||
67 | + | ||
68 | + /** | ||
69 | + * @param observerType | ||
70 | + */ | ||
71 | + public abstract <T extends Observer> List<T> getPreInitObservers(Class<T> observerType); | ||
72 | +} |
java/common/com/mumfrey/liteloader/api/manager/APIProvider.java renamed to src/main/java/com/mumfrey/liteloader/api/manager/APIProvider.java
1 | -package com.mumfrey.liteloader.api.manager; | ||
2 | - | ||
3 | -import java.util.regex.Pattern; | ||
4 | - | ||
5 | -import com.mumfrey.liteloader.api.LiteAPI; | ||
6 | - | ||
7 | -/** | ||
8 | - * Interface for the API Provider, which manages API instances and lifecycle | ||
9 | - * | ||
10 | - * @author Adam Mummery-Smith | ||
11 | - */ | ||
12 | -public interface APIProvider | ||
13 | -{ | ||
14 | - public static final Pattern idAndRevisionPattern = Pattern.compile("^([^@]+)@([0-9]{1,5})$"); | ||
15 | - | ||
16 | - /** | ||
17 | - * Get all available API instances in an array | ||
18 | - */ | ||
19 | - public abstract LiteAPI[] getAPIs(); | ||
20 | - | ||
21 | - /** | ||
22 | - * Returns true if the specified API is available | ||
23 | - * | ||
24 | - * @param identifier API identifier (case sensitive) or API identifier-plus-minrevision in the form "identifier@minver" | ||
25 | - */ | ||
26 | - public abstract boolean isAPIAvailable(String identifier); | ||
27 | - | ||
28 | - /** | ||
29 | - * Returns true if the specified API is available | ||
30 | - * | ||
31 | - * @param identifier API identifier (case sensitive) | ||
32 | - * @param minRevision minimum required revision | ||
33 | - */ | ||
34 | - public abstract boolean isAPIAvailable(String identifier, int minRevision); | ||
35 | - | ||
36 | - /** | ||
37 | - * Gets a specific API by identifier | ||
38 | - * | ||
39 | - * @param identifier API identifier (case sensitive) | ||
40 | - */ | ||
41 | - public abstract LiteAPI getAPI(String identifier); | ||
42 | - | ||
43 | - /** | ||
44 | - * Gets a specific API by class | ||
45 | - * | ||
46 | - * @param apiClass | ||
47 | - */ | ||
48 | - public abstract <T extends LiteAPI> T getAPI(Class<T> apiClass); | 1 | +package com.mumfrey.liteloader.api.manager; |
2 | + | ||
3 | +import java.util.regex.Pattern; | ||
4 | + | ||
5 | +import com.mumfrey.liteloader.api.LiteAPI; | ||
6 | + | ||
7 | +/** | ||
8 | + * Interface for the API Provider, which manages API instances and lifecycle | ||
9 | + * | ||
10 | + * @author Adam Mummery-Smith | ||
11 | + */ | ||
12 | +public interface APIProvider | ||
13 | +{ | ||
14 | + public static final Pattern idAndRevisionPattern = Pattern.compile("^([^@]+)@([0-9]{1,5})$"); | ||
15 | + | ||
16 | + /** | ||
17 | + * Get all available API instances in an array | ||
18 | + */ | ||
19 | + public abstract LiteAPI[] getAPIs(); | ||
20 | + | ||
21 | + /** | ||
22 | + * Returns true if the specified API is available | ||
23 | + * | ||
24 | + * @param identifier API identifier (case sensitive) or API identifier-plus-minrevision in the form "identifier@minver" | ||
25 | + */ | ||
26 | + public abstract boolean isAPIAvailable(String identifier); | ||
27 | + | ||
28 | + /** | ||
29 | + * Returns true if the specified API is available | ||
30 | + * | ||
31 | + * @param identifier API identifier (case sensitive) | ||
32 | + * @param minRevision minimum required revision | ||
33 | + */ | ||
34 | + public abstract boolean isAPIAvailable(String identifier, int minRevision); | ||
35 | + | ||
36 | + /** | ||
37 | + * Gets a specific API by identifier | ||
38 | + * | ||
39 | + * @param identifier API identifier (case sensitive) | ||
40 | + */ | ||
41 | + public abstract LiteAPI getAPI(String identifier); | ||
42 | + | ||
43 | + /** | ||
44 | + * Gets a specific API by class | ||
45 | + * | ||
46 | + * @param apiClass | ||
47 | + */ | ||
48 | + public abstract <T extends LiteAPI> T getAPI(Class<T> apiClass); | ||
49 | } | 49 | } |
50 | \ No newline at end of file | 50 | \ No newline at end of file |
java/common/com/mumfrey/liteloader/api/manager/APIProviderBasic.java renamed to src/main/java/com/mumfrey/liteloader/api/manager/APIProviderBasic.java
1 | -package com.mumfrey.liteloader.api.manager; | ||
2 | - | ||
3 | -import java.util.ArrayList; | ||
4 | -import java.util.Arrays; | ||
5 | -import java.util.Collections; | ||
6 | -import java.util.HashMap; | ||
7 | -import java.util.List; | ||
8 | -import java.util.Map; | ||
9 | -import java.util.regex.Matcher; | ||
10 | - | ||
11 | -import com.mumfrey.liteloader.api.CoreProvider; | ||
12 | -import com.mumfrey.liteloader.api.LiteAPI; | ||
13 | -import com.mumfrey.liteloader.api.Observer; | ||
14 | -import com.mumfrey.liteloader.interfaces.InterfaceRegistry; | ||
15 | - | ||
16 | -/** | ||
17 | - * Basic implementation of APIProvider and APIAdapter | ||
18 | - * | ||
19 | - * @author Adam Mummery-Smith | ||
20 | - */ | ||
21 | -class APIProviderBasic implements APIProvider, APIAdapter | ||
22 | -{ | ||
23 | - /** | ||
24 | - * API instances | ||
25 | - */ | ||
26 | - private final LiteAPI[] apis; | ||
27 | - | ||
28 | - /** | ||
29 | - * Map of API identifiers to API instances | ||
30 | - */ | ||
31 | - private final Map<String, LiteAPI> apiMap = new HashMap<String, LiteAPI>(); | ||
32 | - | ||
33 | - /** | ||
34 | - * Cached observer set | ||
35 | - */ | ||
36 | - private final Map<LiteAPI, List<? extends Observer>> observers = new HashMap<LiteAPI, List<? extends Observer>>(); | ||
37 | - | ||
38 | - /** | ||
39 | - * Cached preinit observers | ||
40 | - */ | ||
41 | - private final Map<LiteAPI, List<? extends Observer>> preInitiObservers = new HashMap<LiteAPI, List<? extends Observer>>(); | ||
42 | - | ||
43 | - /** | ||
44 | - * Cached CoreProvider set | ||
45 | - */ | ||
46 | - private List<CoreProvider> coreProviders; | ||
47 | - | ||
48 | - APIProviderBasic(LiteAPI[] apis) | ||
49 | - { | ||
50 | - this.apis = apis; | ||
51 | - | ||
52 | - for (LiteAPI api : this.apis) | ||
53 | - { | ||
54 | - this.apiMap.put(api.getIdentifier(), api); | ||
55 | - } | ||
56 | - } | ||
57 | - | ||
58 | - /* (non-Javadoc) | ||
59 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#getRequiredTransformers() | ||
60 | - */ | ||
61 | - @Override | ||
62 | - public List<String> getRequiredTransformers() | ||
63 | - { | ||
64 | - List<String> requiredTransformers = new ArrayList<String>(); | ||
65 | - | ||
66 | - for (LiteAPI api : this.apis) | ||
67 | - { | ||
68 | - String[] apiTransformers = api.getRequiredTransformers(); | ||
69 | - if (apiTransformers != null) | ||
70 | - { | ||
71 | - requiredTransformers.addAll(Arrays.asList(apiTransformers)); | ||
72 | - } | ||
73 | - } | ||
74 | - | ||
75 | - return requiredTransformers; | ||
76 | - } | ||
77 | - | ||
78 | - /* (non-Javadoc) | ||
79 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#getRequiredDownstreamTransformers() | ||
80 | - */ | ||
81 | - @Override | ||
82 | - public List<String> getRequiredDownstreamTransformers() | ||
83 | - { | ||
84 | - List<String> requiredDownstreamTransformers = new ArrayList<String>(); | ||
85 | - | ||
86 | - for (LiteAPI api : this.apis) | ||
87 | - { | ||
88 | - String[] apiTransformers = api.getRequiredDownstreamTransformers(); | ||
89 | - if (apiTransformers != null) | ||
90 | - { | ||
91 | - requiredDownstreamTransformers.addAll(Arrays.asList(apiTransformers)); | ||
92 | - } | ||
93 | - } | ||
94 | - | ||
95 | - return requiredDownstreamTransformers; | ||
96 | - } | ||
97 | - | ||
98 | - /* (non-Javadoc) | ||
99 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#getObservers(com.mumfrey.liteloader.api.LiteAPI) | ||
100 | - */ | ||
101 | - @Override | ||
102 | - public List<? extends Observer> getObservers(LiteAPI api) | ||
103 | - { | ||
104 | - if (!this.observers.containsKey(api)) | ||
105 | - { | ||
106 | - List<Observer> apiObservers = api.getObservers(); | ||
107 | - this.observers.put(api, Collections.unmodifiableList(apiObservers != null ? apiObservers : new ArrayList<Observer>())); | ||
108 | - } | ||
109 | - | ||
110 | - return this.observers.get(api); | ||
111 | - } | ||
112 | - | ||
113 | - @Override | ||
114 | - public List<? extends Observer> getPreInitObservers(LiteAPI api) | ||
115 | - { | ||
116 | - if (!this.preInitiObservers.containsKey(api)) | ||
117 | - { | ||
118 | - List<Observer> apiObservers = api.getPreInitObservers(); | ||
119 | - this.preInitiObservers.put(api, Collections.unmodifiableList(apiObservers != null ? apiObservers : new ArrayList<Observer>())); | ||
120 | - } | ||
121 | - | ||
122 | - return this.preInitiObservers.get(api); | ||
123 | - } | ||
124 | - | ||
125 | - @SuppressWarnings("unchecked") | ||
126 | - @Override | ||
127 | - public <T extends Observer> List<T> getObservers(LiteAPI api, Class<T> observerType) | ||
128 | - { | ||
129 | - List<T> matchingObservers = new ArrayList<T>(); | ||
130 | - | ||
131 | - for (Observer observer : this.getObservers(api)) | ||
132 | - { | ||
133 | - if (observerType.isAssignableFrom(observer.getClass()) && !matchingObservers.contains(observer)) | ||
134 | - { | ||
135 | - matchingObservers.add((T)observer); | ||
136 | - } | ||
137 | - } | ||
138 | - | ||
139 | - return matchingObservers; | ||
140 | - } | ||
141 | - | ||
142 | - @SuppressWarnings("unchecked") | ||
143 | - @Override | ||
144 | - public <T extends Observer> List<T> getAllObservers(Class<T> observerType) | ||
145 | - { | ||
146 | - List<T> matchingObservers = new ArrayList<T>(); | ||
147 | - for (LiteAPI api : this.apis) | ||
148 | - { | ||
149 | - matchingObservers.addAll(this.<T>getObservers(api, observerType)); | ||
150 | - } | ||
151 | - | ||
152 | - for (CoreProvider coreProvider : this.getCoreProviders()) | ||
153 | - { | ||
154 | - if (observerType.isAssignableFrom(coreProvider.getClass()) && !matchingObservers.contains(coreProvider)) | ||
155 | - matchingObservers.add((T)coreProvider); | ||
156 | - } | ||
157 | - | ||
158 | - return matchingObservers; | ||
159 | - } | ||
160 | - | ||
161 | - @SuppressWarnings("unchecked") | ||
162 | - @Override | ||
163 | - public <T extends Observer> List<T> getPreInitObservers(Class<T> observerType) | ||
164 | - { | ||
165 | - List<T> matchingObservers = new ArrayList<T>(); | ||
166 | - for (LiteAPI api : this.apis) | ||
167 | - { | ||
168 | - for (Observer observer : this.getPreInitObservers(api)) | ||
169 | - { | ||
170 | - if (observerType.isAssignableFrom(observer.getClass()) && !matchingObservers.contains(observer)) | ||
171 | - { | ||
172 | - matchingObservers.add((T)observer); | ||
173 | - } | ||
174 | - } | ||
175 | - } | ||
176 | - | ||
177 | - return matchingObservers; | ||
178 | - } | ||
179 | - | ||
180 | - /* (non-Javadoc) | ||
181 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#registerInterfaceProviders(com.mumfrey.liteloader.core.InterfaceManager) | ||
182 | - */ | ||
183 | - @Override | ||
184 | - public void registerInterfaces(InterfaceRegistry interfaceManager) | ||
185 | - { | ||
186 | - for (LiteAPI api : this.apis) | ||
187 | - { | ||
188 | - interfaceManager.registerAPI(api); | ||
189 | - } | ||
190 | - } | ||
191 | - | ||
192 | - /* (non-Javadoc) | ||
193 | - * @see com.mumfrey.liteloader.api.manager.APIAdapter#getCoreProviders() | ||
194 | - */ | ||
195 | - @Override | ||
196 | - public List<CoreProvider> getCoreProviders() | ||
197 | - { | ||
198 | - if (this.coreProviders == null) | ||
199 | - { | ||
200 | - List<CoreProvider> coreProviders = new ArrayList<CoreProvider>(); | ||
201 | - | ||
202 | - for (LiteAPI api : this.apis) | ||
203 | - { | ||
204 | - List<CoreProvider> apiCoreProviders = api.getCoreProviders(); | ||
205 | - if (apiCoreProviders != null) | ||
206 | - { | ||
207 | - coreProviders.addAll(apiCoreProviders); | ||
208 | - } | ||
209 | - } | ||
210 | - | ||
211 | - this.coreProviders = Collections.unmodifiableList(coreProviders); | ||
212 | - } | ||
213 | - | ||
214 | - return this.coreProviders; | ||
215 | - } | ||
216 | - | ||
217 | - /* (non-Javadoc) | ||
218 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#getAPIs() | ||
219 | - */ | ||
220 | - @Override | ||
221 | - public LiteAPI[] getAPIs() | ||
222 | - { | ||
223 | - return this.apis; | ||
224 | - } | ||
225 | - | ||
226 | - /* (non-Javadoc) | ||
227 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#isAPIAvailable(java.lang.String) | ||
228 | - */ | ||
229 | - @Override | ||
230 | - public boolean isAPIAvailable(String identifier) | ||
231 | - { | ||
232 | - if (identifier != null && identifier.contains("@")) | ||
233 | - { | ||
234 | - Matcher idAndRevisionPatternMatcher = APIProvider.idAndRevisionPattern.matcher(identifier); | ||
235 | - if (idAndRevisionPatternMatcher.matches()) | ||
236 | - { | ||
237 | - return this.isAPIAvailable(idAndRevisionPatternMatcher.group(1), Integer.parseInt(idAndRevisionPatternMatcher.group(2))); | ||
238 | - } | ||
239 | - } | ||
240 | - | ||
241 | - return this.apiMap.containsKey(identifier); | ||
242 | - } | ||
243 | - | ||
244 | - /* (non-Javadoc) | ||
245 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#isAPIAvailable(java.lang.String, int) | ||
246 | - */ | ||
247 | - @Override | ||
248 | - public boolean isAPIAvailable(String identifier, int minRevision) | ||
249 | - { | ||
250 | - LiteAPI api = this.apiMap.get(identifier); | ||
251 | - if (api == null) return false; | ||
252 | - | ||
253 | - return api.getRevision() >= minRevision; | ||
254 | - } | ||
255 | - | ||
256 | - /* (non-Javadoc) | ||
257 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#getAPI(java.lang.String) | ||
258 | - */ | ||
259 | - @Override | ||
260 | - public LiteAPI getAPI(String identifier) | ||
261 | - { | ||
262 | - return this.apiMap.get(identifier); | ||
263 | - } | ||
264 | - | ||
265 | - /* (non-Javadoc) | ||
266 | - * @see com.mumfrey.liteloader.api.manager.APIProvider#getAPI(java.lang.Class) | ||
267 | - */ | ||
268 | - @SuppressWarnings("unchecked") | ||
269 | - @Override | ||
270 | - public <T extends LiteAPI> T getAPI(Class<T> apiClass) | ||
271 | - { | ||
272 | - try | ||
273 | - { | ||
274 | - for (LiteAPI api : this.apis) | ||
275 | - { | ||
276 | - if (apiClass.isAssignableFrom(api.getClass())) | ||
277 | - return (T)api; | ||
278 | - } | ||
279 | - } | ||
280 | - catch (NullPointerException ex1) {} | ||
281 | - catch (ClassCastException ex2) {} | ||
282 | - | ||
283 | - return null; | ||
284 | - } | ||
285 | -} | 1 | +package com.mumfrey.liteloader.api.manager; |
2 | + | ||
3 | +import java.util.ArrayList; | ||
4 | +import java.util.Arrays; | ||
5 | +import java.util.Collections; | ||
6 | +import java.util.HashMap; | ||
7 | +import java.util.List; | ||
8 | +import java.util.Map; | ||
9 | +import java.util.regex.Matcher; | ||
10 | + | ||
11 | +import com.mumfrey.liteloader.api.CoreProvider; | ||
12 | +import com.mumfrey.liteloader.api.LiteAPI; | ||
13 | +import com.mumfrey.liteloader.api.Observer; | ||
14 | +import com.mumfrey.liteloader.interfaces.InterfaceRegistry; | ||
15 | + | ||
16 | +/** | ||
17 | + * Basic implementation of APIProvider and APIAdapter | ||
18 | + * | ||
19 | + * @author Adam Mummery-Smith | ||
20 | + */ | ||
21 | +class APIProviderBasic implements APIProvider, APIAdapter | ||
22 | +{ | ||
23 | + /** | ||
24 | + * API instances | ||
25 | + */ | ||
26 | + private final LiteAPI[] apis; | ||
27 | + | ||
28 | + /** | ||
29 | + * Map of API identifiers to API instances | ||
30 | + */ | ||
31 | + private final Map<String, LiteAPI> apiMap = new HashMap<String, LiteAPI>(); | ||
32 | + | ||
33 | + /** | ||
34 | + * Cached observer set | ||
35 | + */ | ||
36 | + private final Map<LiteAPI, List<? extends Observer>> observers = new HashMap<LiteAPI, List<? extends Observer>>(); | ||
37 | + | ||
38 | + /** | ||
39 | + * Cached preinit observers | ||
40 | + */ | ||
41 | + private final Map<LiteAPI, List<? extends Observer>> preInitiObservers = new HashMap<LiteAPI, List<? extends Observer>>(); | ||
42 | + | ||
43 | + /** | ||
44 | + * Cached CoreProvider set | ||
45 | + */ | ||
46 | + private List<CoreProvider> coreProviders; | ||
47 | + | ||
48 | + APIProviderBasic(LiteAPI[] apis) | ||
49 | + { | ||
50 | + this.apis = apis; | ||
51 | + | ||
52 | + for (LiteAPI api : this.apis) | ||
53 | + { | ||
54 | + this.apiMap.put(api.getIdentifier(), api); | ||
55 | + } | ||
56 | + } | ||
57 | + | ||
58 | + /* (non-Javadoc) | ||
59 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#getRequiredTransformers() | ||
60 | + */ | ||
61 | + @Override | ||
62 | + public List<String> getRequiredTransformers() | ||
63 | + { | ||
64 | + List<String> requiredTransformers = new ArrayList<String>(); | ||
65 | + | ||
66 | + for (LiteAPI api : this.apis) | ||
67 | + { | ||
68 | + String[] apiTransformers = api.getRequiredTransformers(); | ||
69 | + if (apiTransformers != null) | ||
70 | + { | ||
71 | + requiredTransformers.addAll(Arrays.asList(apiTransformers)); | ||
72 | + } | ||
73 | + } | ||
74 | + | ||
75 | + return requiredTransformers; | ||
76 | + } | ||
77 | + | ||
78 | + /* (non-Javadoc) | ||
79 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#getRequiredDownstreamTransformers() | ||
80 | + */ | ||
81 | + @Override | ||
82 | + public List<String> getRequiredDownstreamTransformers() | ||
83 | + { | ||
84 | + List<String> requiredDownstreamTransformers = new ArrayList<String>(); | ||
85 | + | ||
86 | + for (LiteAPI api : this.apis) | ||
87 | + { | ||
88 | + String[] apiTransformers = api.getRequiredDownstreamTransformers(); | ||
89 | + if (apiTransformers != null) | ||
90 | + { | ||
91 | + requiredDownstreamTransformers.addAll(Arrays.asList(apiTransformers)); | ||
92 | + } | ||
93 | + } | ||
94 | + | ||
95 | + return requiredDownstreamTransformers; | ||
96 | + } | ||
97 | + | ||
98 | + /* (non-Javadoc) | ||
99 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#getObservers(com.mumfrey.liteloader.api.LiteAPI) | ||
100 | + */ | ||
101 | + @Override | ||
102 | + public List<? extends Observer> getObservers(LiteAPI api) | ||
103 | + { | ||
104 | + if (!this.observers.containsKey(api)) | ||
105 | + { | ||
106 | + List<Observer> apiObservers = api.getObservers(); | ||
107 | + this.observers.put(api, Collections.unmodifiableList(apiObservers != null ? apiObservers : new ArrayList<Observer>())); | ||
108 | + } | ||
109 | + | ||
110 | + return this.observers.get(api); | ||
111 | + } | ||
112 | + | ||
113 | + @Override | ||
114 | + public List<? extends Observer> getPreInitObservers(LiteAPI api) | ||
115 | + { | ||
116 | + if (!this.preInitiObservers.containsKey(api)) | ||
117 | + { | ||
118 | + List<Observer> apiObservers = api.getPreInitObservers(); | ||
119 | + this.preInitiObservers.put(api, Collections.unmodifiableList(apiObservers != null ? apiObservers : new ArrayList<Observer>())); | ||
120 | + } | ||
121 | + | ||
122 | + return this.preInitiObservers.get(api); | ||
123 | + } | ||
124 | + | ||
125 | + @SuppressWarnings("unchecked") | ||
126 | + @Override | ||
127 | + public <T extends Observer> List<T> getObservers(LiteAPI api, Class<T> observerType) | ||
128 | + { | ||
129 | + List<T> matchingObservers = new ArrayList<T>(); | ||
130 | + | ||
131 | + for (Observer observer : this.getObservers(api)) | ||
132 | + { | ||
133 | + if (observerType.isAssignableFrom(observer.getClass()) && !matchingObservers.contains(observer)) | ||
134 | + { | ||
135 | + matchingObservers.add((T)observer); | ||
136 | + } | ||
137 | + } | ||
138 | + | ||
139 | + return matchingObservers; | ||
140 | + } | ||
141 | + | ||
142 | + @SuppressWarnings("unchecked") | ||
143 | + @Override | ||
144 | + public <T extends Observer> List<T> getAllObservers(Class<T> observerType) | ||
145 | + { | ||
146 | + List<T> matchingObservers = new ArrayList<T>(); | ||
147 | + for (LiteAPI api : this.apis) | ||
148 | + { | ||
149 | + matchingObservers.addAll(this.<T>getObservers(api, observerType)); | ||
150 | + } | ||
151 | + | ||
152 | + for (CoreProvider coreProvider : this.getCoreProviders()) | ||
153 | + { | ||
154 | + if (observerType.isAssignableFrom(coreProvider.getClass()) && !matchingObservers.contains(coreProvider)) | ||
155 | + matchingObservers.add((T)coreProvider); | ||
156 | + } | ||
157 | + | ||
158 | + return matchingObservers; | ||
159 | + } | ||
160 | + | ||
161 | + @SuppressWarnings("unchecked") | ||
162 | + @Override | ||
163 | + public <T extends Observer> List<T> getPreInitObservers(Class<T> observerType) | ||
164 | + { | ||
165 | + List<T> matchingObservers = new ArrayList<T>(); | ||
166 | + for (LiteAPI api : this.apis) | ||
167 | + { | ||
168 | + for (Observer observer : this.getPreInitObservers(api)) | ||
169 | + { | ||
170 | + if (observerType.isAssignableFrom(observer.getClass()) && !matchingObservers.contains(observer)) | ||
171 | + { | ||
172 | + matchingObservers.add((T)observer); | ||
173 | + } | ||
174 | + } | ||
175 | + } | ||
176 | + | ||
177 | + return matchingObservers; | ||
178 | + } | ||
179 | + | ||
180 | + /* (non-Javadoc) | ||
181 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#registerInterfaceProviders(com.mumfrey.liteloader.core.InterfaceManager) | ||
182 | + */ | ||
183 | + @Override | ||
184 | + public void registerInterfaces(InterfaceRegistry interfaceManager) | ||
185 | + { | ||
186 | + for (LiteAPI api : this.apis) | ||
187 | + { | ||
188 | + interfaceManager.registerAPI(api); | ||
189 | + } | ||
190 | + } | ||
191 | + | ||
192 | + /* (non-Javadoc) | ||
193 | + * @see com.mumfrey.liteloader.api.manager.APIAdapter#getCoreProviders() | ||
194 | + */ | ||
195 | + @Override | ||
196 | + public List<CoreProvider> getCoreProviders() | ||
197 | + { | ||
198 | + if (this.coreProviders == null) | ||
199 | + { | ||
200 | + List<CoreProvider> coreProviders = new ArrayList<CoreProvider>(); | ||
201 | + | ||
202 | + for (LiteAPI api : this.apis) | ||
203 | + { | ||
204 | + List<CoreProvider> apiCoreProviders = api.getCoreProviders(); | ||
205 | + if (apiCoreProviders != null) | ||
206 | + { | ||
207 | + coreProviders.addAll(apiCoreProviders); | ||
208 | + } | ||
209 | + } | ||
210 | + | ||
211 | + this.coreProviders = Collections.unmodifiableList(coreProviders); | ||
212 | + } | ||
213 | + | ||
214 | + return this.coreProviders; | ||
215 | + } | ||
216 | + | ||
217 | + /* (non-Javadoc) | ||
218 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#getAPIs() | ||
219 | + */ | ||
220 | + @Override | ||
221 | + public LiteAPI[] getAPIs() | ||
222 | + { | ||
223 | + return this.apis; | ||
224 | + } | ||
225 | + | ||
226 | + /* (non-Javadoc) | ||
227 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#isAPIAvailable(java.lang.String) | ||
228 | + */ | ||
229 | + @Override | ||
230 | + public boolean isAPIAvailable(String identifier) | ||
231 | + { | ||
232 | + if (identifier != null && identifier.contains("@")) | ||
233 | + { | ||
234 | + Matcher idAndRevisionPatternMatcher = APIProvider.idAndRevisionPattern.matcher(identifier); | ||
235 | + if (idAndRevisionPatternMatcher.matches()) | ||
236 | + { | ||
237 | + return this.isAPIAvailable(idAndRevisionPatternMatcher.group(1), Integer.parseInt(idAndRevisionPatternMatcher.group(2))); | ||
238 | + } | ||
239 | + } | ||
240 | + | ||
241 | + return this.apiMap.containsKey(identifier); | ||
242 | + } | ||
243 | + | ||
244 | + /* (non-Javadoc) | ||
245 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#isAPIAvailable(java.lang.String, int) | ||
246 | + */ | ||
247 | + @Override | ||
248 | + public boolean isAPIAvailable(String identifier, int minRevision) | ||
249 | + { | ||
250 | + LiteAPI api = this.apiMap.get(identifier); | ||
251 | + if (api == null) return false; | ||
252 | + | ||
253 | + return api.getRevision() >= minRevision; | ||
254 | + } | ||
255 | + | ||
256 | + /* (non-Javadoc) | ||
257 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#getAPI(java.lang.String) | ||
258 | + */ | ||
259 | + @Override | ||
260 | + public LiteAPI getAPI(String identifier) | ||
261 | + { | ||
262 | + return this.apiMap.get(identifier); | ||
263 | + } | ||
264 | + | ||
265 | + /* (non-Javadoc) | ||
266 | + * @see com.mumfrey.liteloader.api.manager.APIProvider#getAPI(java.lang.Class) | ||
267 | + */ | ||
268 | + @SuppressWarnings("unchecked") | ||
269 | + @Override | ||
270 | + public <T extends LiteAPI> T getAPI(Class<T> apiClass) | ||
271 | + { | ||
272 | + try | ||
273 | + { | ||
274 | + for (LiteAPI api : this.apis) | ||
275 | + { | ||
276 | + if (apiClass.isAssignableFrom(api.getClass())) | ||
277 | + return (T)api; | ||
278 | + } | ||
279 | + } | ||
280 | + catch (NullPointerException ex1) {} | ||
281 | + catch (ClassCastException ex2) {} | ||
282 | + | ||
283 | + return null; | ||
284 | + } | ||
285 | +} |
java/common/com/mumfrey/liteloader/api/manager/APIRegistry.java renamed to src/main/java/com/mumfrey/liteloader/api/manager/APIRegistry.java
1 | -package com.mumfrey.liteloader.api.manager; | ||
2 | - | ||
3 | -import java.util.ArrayList; | ||
4 | -import java.util.LinkedHashMap; | ||
5 | -import java.util.LinkedHashSet; | ||
6 | -import java.util.List; | ||
7 | -import java.util.Map; | ||
8 | -import java.util.Set; | ||
9 | - | ||
10 | -import net.minecraft.launchwrapper.Launch; | ||
11 | - | ||
12 | -import com.mumfrey.liteloader.api.LiteAPI; | ||
13 | -import com.mumfrey.liteloader.api.exceptions.InvalidAPIStateException; | ||
14 | -import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
15 | -import com.mumfrey.liteloader.launch.LoaderProperties; | ||
16 | -import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | ||
17 | -import com.mumfrey.liteloader.util.log.LiteLoaderLogger.Verbosity; | ||
18 | - | ||
19 | -/** | ||
20 | - * This is where we register API classes during early startup before baking the registered list into an | ||
21 | - * APIProvider instance | ||
22 | - * | ||
23 | - * @author Adam Mummery-Smith | ||
24 | - */ | ||
25 | -public final class APIRegistry | ||
26 | -{ | ||
27 | - private Set<String> registeredAPIClasses = new LinkedHashSet<String>(); | ||
28 | - private Map<String, LiteAPI> instances = new LinkedHashMap<String, LiteAPI>(); | ||
29 | - | ||
30 | - private final LoaderEnvironment environment; | ||
31 | - | ||
32 | - private final LoaderProperties properties; | ||
33 | - | ||
34 | - private APIProviderBasic baked; | ||
35 | - | ||
36 | - /** | ||
37 | - * @param environment | ||
38 | - * @param properties | ||
39 | - */ | ||
40 | - public APIRegistry(LoaderEnvironment environment, LoaderProperties properties) | ||
41 | - { | ||
42 | - this.environment = environment; | ||
43 | - this.properties = properties; | ||
44 | - } | ||
45 | - | ||
46 | - /** | ||
47 | - * Register an API class, throws an exception if the API list has already been baked | ||
48 | - * | ||
49 | - * @param apiClass | ||
50 | - */ | ||
51 | - public void registerAPI(String apiClass) throws InvalidAPIStateException | ||
52 | - { | ||
53 | - if (this.baked != null) | ||
54 | - { | ||
55 | - throw new InvalidAPIStateException("Unable to register API provider '" + apiClass + "' because the API state is now frozen, this probably means you are registering an API too late in the initialisation process"); | ||
56 | - } | ||
57 | - | ||
58 | - if (!this.registeredAPIClasses.contains(apiClass)) | ||
59 | - { | ||
60 | - LiteLoaderLogger.info(Verbosity.REDUCED, "Registering API provider class %s", apiClass); | ||
61 | - this.registeredAPIClasses.add(apiClass); | ||
62 | - } | ||
63 | - } | ||
64 | - | ||
65 | - /** | ||
66 | - * Get all currently registered API classes | ||
67 | - */ | ||
68 | - public String[] getRegisteredAPIs() | ||
69 | - { | ||
70 | - return this.registeredAPIClasses.toArray(new String[0]); | ||
71 | - } | ||
72 | - | ||
73 | - /** | ||
74 | - * @param apiClassName | ||
75 | - */ | ||
76 | - private LiteAPI spawnAPI(String apiClassName) | ||
77 | - { | ||
78 | - try | ||
79 | - { | ||
80 | - LiteLoaderLogger.info("Spawning API provider class '%s' ...", apiClassName); | ||
81 | - | ||
82 | - @SuppressWarnings("unchecked") | ||
83 | - Class<? extends LiteAPI> apiClass = (Class<? extends LiteAPI>)Class.forName(apiClassName, true, Launch.classLoader); | ||
84 | - | ||
85 | - LiteAPI api = apiClass.newInstance(); | ||
86 | - String identifier = api.getIdentifier(); | ||
87 | - | ||
88 | - if (!this.instances.containsKey(identifier)) | ||
89 | - { | ||
90 | - LiteLoaderLogger.info(Verbosity.REDUCED, "API provider class '%s' provides API '%s'", apiClassName, identifier); | ||
91 | - this.instances.put(identifier, api); | ||
92 | - return api; | ||
93 | - } | ||
94 | - | ||
95 | - Class<? extends LiteAPI> conflictingAPIClass = this.instances.get(identifier).getClass(); | ||
96 | - LiteLoaderLogger.severe("API identifier clash while registering '%s', identifier '%s' clashes with '%s'", apiClassName, identifier, conflictingAPIClass); | ||
97 | - } | ||
98 | - catch (ClassNotFoundException ex) | ||
99 | - { | ||
100 | - LiteLoaderLogger.severe("API class '%s' could not be created, the specified class could not be loaded", apiClassName); | ||
101 | - } | ||
102 | - catch (Exception ex) | ||
103 | - { | ||
104 | - LiteLoaderLogger.severe(ex, "Error while instancing API class '%s'", apiClassName); | ||
105 | - } | ||
106 | - | ||
107 | - return null; | ||
108 | - } | ||
109 | - | ||
110 | - /** | ||
111 | - * Populate and return the API instance array | ||
112 | - */ | ||
113 | - private LiteAPI[] getAllAPIs() | ||
114 | - { | ||
115 | - List<LiteAPI> allAPIs = new ArrayList<LiteAPI>(); | ||
116 | - | ||
117 | - for (String apiClass : this.registeredAPIClasses) | ||
118 | - { | ||
119 | - LiteAPI api = this.spawnAPI(apiClass); | ||
120 | - if (api != null) | ||
121 | - { | ||
122 | - allAPIs.add(api); | ||
123 | - } | ||
124 | - } | ||
125 | - | ||
126 | - for (LiteAPI api : allAPIs) | ||
127 | - { | ||
128 | - LiteLoaderLogger.info(Verbosity.REDUCED, "Initialising API '%s' ...", api.getIdentifier()); | ||
129 | - api.init(this.environment, this.properties); | ||
130 | - } | ||
131 | - | ||
132 | - return allAPIs.toArray(new LiteAPI[allAPIs.size()]); | ||
133 | - } | ||
134 | - | ||
135 | - /** | ||
136 | - * Bakes all currently registered API classes to a new APIProvider containing the API instances | ||
137 | - * @throws InvalidAPIStateException if the API list was already baked | ||
138 | - */ | ||
139 | - public APIProvider bake() throws InvalidAPIStateException | ||
140 | - { | ||
141 | - if (this.baked != null) | ||
142 | - { | ||
143 | - throw new InvalidAPIStateException("Unable to bake the API provider list because the API list is already baked"); | ||
144 | - } | ||
145 | - | ||
146 | - LiteAPI[] apis = this.getAllAPIs(); | ||
147 | - return this.baked = new APIProviderBasic(apis); | ||
148 | - } | ||
149 | - | ||
150 | - /** | ||
151 | - * Gets the current APIProvider instance | ||
152 | - * @throws InvalidAPIStateException if the provider list was not yet baked | ||
153 | - */ | ||
154 | - public APIProvider getProvider() throws InvalidAPIStateException | ||
155 | - { | ||
156 | - if (this.baked == null) | ||
157 | - { | ||
158 | - throw new InvalidAPIStateException("Call to APIRegistry.getProvider() failed because the provider list has not been baked"); | ||
159 | - } | ||
160 | - | ||
161 | - return this.baked; | ||
162 | - } | ||
163 | - | ||
164 | - /** | ||
165 | - * Gets the current APIAdapter instance | ||
166 | - * @throws InvalidAPIStateException if the provider list was not yet baked | ||
167 | - */ | ||
168 | - public APIAdapter getAdapter() throws InvalidAPIStateException | ||
169 | - { | ||
170 | - if (this.baked == null) | ||
171 | - { | ||
172 | - throw new InvalidAPIStateException("Call to APIRegistry.APIAdapter() failed because the provider list has not been baked"); | ||
173 | - } | ||
174 | - | ||
175 | - return this.baked; | ||
176 | - } | ||
177 | -} | 1 | +package com.mumfrey.liteloader.api.manager; |
2 | + | ||
3 | +import java.util.ArrayList; | ||
4 | +import java.util.LinkedHashMap; | ||
5 | +import java.util.LinkedHashSet; | ||
6 | +import java.util.List; | ||
7 | +import java.util.Map; | ||
8 | +import java.util.Set; | ||
9 | + | ||
10 | +import net.minecraft.launchwrapper.Launch; | ||
11 | + | ||
12 | +import com.mumfrey.liteloader.api.LiteAPI; | ||
13 | +import com.mumfrey.liteloader.api.exceptions.InvalidAPIStateException; | ||
14 | +import com.mumfrey.liteloader.launch.LoaderEnvironment; | ||
15 | +import com.mumfrey.liteloader.launch.LoaderProperties; | ||
16 | +import com.mumfrey.liteloader.util.log.LiteLoaderLogger; | ||
17 | +import com.mumfrey.liteloader.util.log.LiteLoaderLogger.Verbosity; | ||
18 | + | ||
19 | +/** | ||
20 | + * This is where we register API classes during early startup before baking the registered list into an | ||
21 | + * APIProvider instance | ||
22 | + * | ||
23 | + * @author Adam Mummery-Smith | ||
24 | + */ | ||
25 | +public final class APIRegistry | ||
26 | +{ | ||
27 | + private Set<String> registeredAPIClasses = new LinkedHashSet<String>(); | ||
28 | + private Map<String, LiteAPI> instances = new LinkedHashMap<String, LiteAPI>(); | ||
29 | + | ||
30 | + private final LoaderEnvironment environment; | ||
31 | + | ||
32 | + private final LoaderProperties properties; | ||
33 | + | ||
34 | + private APIProviderBasic baked; | ||
35 | + | ||
36 | + /** | ||
37 | + * @param environment | ||
38 | + * @param properties | ||
39 | + */ | ||
40 | + public APIRegistry(LoaderEnvironment environment, LoaderProperties properties) | ||
41 | + { | ||
42 | + this.environment = environment; | ||
43 | + this.properties = properties; | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * Register an API class, throws an exception if the API list has already been baked | ||
48 | + * | ||
49 | + * @param apiClass | ||
50 | + */ | ||
51 | + public void registerAPI(String apiClass) throws InvalidAPIStateException | ||
52 | + { | ||
53 | + if (this.baked != null) | ||
54 | + { | ||
55 | + throw new InvalidAPIStateException("Unable to register API provider '" + apiClass + "' because the API state is now frozen, this probably means you are registering an API too late in the initialisation process"); | ||
56 | + } | ||
57 | + | ||
58 | + if (!this.registeredAPIClasses.contains(apiClass)) | ||
59 | + { | ||
60 | + LiteLoaderLogger.info(Verbosity.REDUCED, "Registering API provider class %s", apiClass); | ||
61 | + this.registeredAPIClasses.add(apiClass); | ||
62 | + } | ||
63 | + } | ||
64 | + | ||
65 | + /** | ||
66 | + * Get all currently registered API classes | ||
67 | + */ | ||
68 | + public String[] getRegisteredAPIs() | ||
69 | + { | ||
70 | + return this.registeredAPIClasses.toArray(new String[0]); | ||
71 | + } | ||
72 | + | ||
73 | + /** | ||
74 | + * @param apiClassName | ||
75 | + */ | ||
76 | + private LiteAPI spawnAPI(String apiClassName) | ||
77 | + { | ||
78 | + try | ||
79 | + { | ||
80 | + LiteLoaderLogger.info("Spawning API provider class '%s' ...", apiClassName); | ||
81 | + | ||
82 | + @SuppressWarnings("unchecked") | ||
83 | + Class<? extends LiteAPI> apiClass = (Class<? extends LiteAPI>)Class.forName(apiClassName, true, Launch.classLoader); | ||
84 | + | ||
85 | + LiteAPI api = apiClass.newInstance(); | ||
86 | + String identifier = api.getIdentifier(); | ||
87 | + | ||
88 | + if (!this.instances.containsKey(identifier)) | ||
89 | + { | ||
90 | + LiteLoaderLogger.info(Verbosity.REDUCED, "API provider class '%s' provides API '%s'", apiClassName, identifier); | ||
91 | + this.instances.put(identifier, api); | ||
92 | + return api; | ||
93 | + } | ||
94 | + | ||
95 | + Class<? extends LiteAPI> conflictingAPIClass = this.instances.get(identifier).getClass(); | ||
96 | + LiteLoaderLogger.severe("API identifier clash while registering '%s', identifier '%s' clashes with '%s'", apiClassName, identifier, conflictingAPIClass); | ||
97 | + } | ||
98 | + catch (ClassNotFoundException ex) | ||
99 | + { | ||
100 | + LiteLoaderLogger.severe("API class '%s' could not be created, the specified class could not be loaded", apiClassName); | ||
101 | + } | ||
102 | + catch (Exception ex) | ||
103 | + { | ||
104 | + LiteLoaderLogger.severe(ex, "Error while instancing API class '%s'", apiClassName); | ||
105 | + } | ||
106 | + | ||
107 | + return null; | ||
108 | + } | ||
109 | + | ||
110 | + /** | ||
111 | + * Populate and return the API instance array | ||
112 | + */ | ||
113 | + private LiteAPI[] getAllAPIs() | ||
114 | + { | ||
115 | + List<LiteAPI> allAPIs = new ArrayList<LiteAPI>(); | ||
116 | + | ||
117 | + for (String apiClass : this.registeredAPIClasses) | ||
118 | + { | ||
119 | + LiteAPI api = this.spawnAPI(apiClass); | ||
120 | + if (api != null) | ||
121 | + { | ||
122 | + allAPIs.add(api); | ||
123 | + } | ||
124 | + } | ||
125 | + | ||
126 | + for (LiteAPI api : allAPIs) | ||
127 | + { | ||
128 | + LiteLoaderLogger.info(Verbosity.REDUCED, "Initialising API '%s' ...", api.getIdentifier()); | ||
129 | + api.init(this.environment, this.properties); | ||
130 | + } | ||
131 | + | ||
132 | + return allAPIs.toArray(new LiteAPI[allAPIs.size()]); | ||
133 | + } | ||
134 | + | ||
135 | + /** | ||
136 | + * Bakes all currently registered API classes to a new APIProvider containing the API instances | ||
137 | + * @throws InvalidAPIStateException if the API list was already baked | ||
138 | + */ | ||
139 | + public APIProvider bake() throws InvalidAPIStateException | ||
140 | + { | ||
141 | + if (this.baked != null) | ||
142 | + { | ||
143 | + throw new InvalidAPIStateException("Unable to bake the API provider list because the API list is already baked"); | ||
144 | + } | ||
145 | + | ||
146 | + LiteAPI[] apis = this.getAllAPIs(); | ||
147 | + return this.baked = new APIProviderBasic(apis); | ||
148 | + } | ||
149 | + | ||
150 | + /** | ||
151 | + * Gets the current APIProvider instance | ||
152 | + * @throws InvalidAPIStateException if the provider list was not yet baked | ||
153 | + */ | ||
154 | + public APIProvider getProvider() throws InvalidAPIStateException | ||
155 | + { | ||
156 | + if (this.baked == null) | ||
157 | + { | ||
158 | + throw new InvalidAPIStateException("Call to APIRegistry.getProvider() failed because the provider list has not been baked"); | ||
159 | + } | ||
160 | + | ||
161 | + return this.baked; | ||
162 | + } | ||
163 | + | ||
164 | + /** | ||
165 | + * Gets the current APIAdapter instance | ||
166 | + * @throws InvalidAPIStateException if the provider list was not yet baked | ||
167 | + */ | ||
168 | + public APIAdapter getAdapter() throws InvalidAPIStateException | ||
169 | + { | ||
170 | + if (this.baked == null) | ||
171 | + { | ||
172 | + throw new InvalidAPIStateException("Call to APIRegistry.APIAdapter() failed because the provider list has not been baked"); | ||
173 | + } | ||
174 | + | ||
175 | + return this.baked; | ||
176 | + } | ||
177 | +} |
java/common/com/mumfrey/liteloader/common/GameEngine.java renamed to src/main/java/com/mumfrey/liteloader/common/GameEngine.java
1 | -package com.mumfrey.liteloader.common; | ||
2 | - | ||
3 | -import java.util.List; | ||
4 | - | ||
5 | -import net.minecraft.client.settings.KeyBinding; | ||
6 | -import net.minecraft.profiler.Profiler; | ||
7 | -import net.minecraft.server.MinecraftServer; | ||
8 | - | ||
9 | -/** | ||
10 | - * @author Adam Mummery-Smith | ||
11 | - * | ||
12 | - * @param <TClient> Type of the client runtime, "Minecraft" on client and null on the server | ||
13 | - * @param <TServer> Type of the server runtime, "IntegratedServer" on the client, "MinecraftServer" on the server | ||
14 | - */ | ||
15 | -public interface GameEngine<TClient, TServer extends MinecraftServer> | ||
16 | -{ | ||
17 | - /** | ||
18 | - * True if the environment is a client environment | ||
19 | - */ | ||
20 | - public abstract boolean isClient(); | ||
21 | - | ||
22 | - /** | ||
23 | - * True if the current environment is a server environment, always true on dedicated and true in single player | ||
24 | - */ | ||
25 | - public abstract boolean isServer(); | ||
26 | - | ||
27 | - /** | ||
28 | - * True if the client is "in game", always true on server | ||
29 | - */ | ||
30 | - public abstract boolean isInGame(); | ||
31 | - | ||
32 | - /** | ||
33 | - * True if the game loop's "isRunning" flag is true | ||
34 | - */ | ||
35 | - public abstract boolean isRunning(); | ||
36 | - | ||
37 | - /** | ||
38 | - * True if the current world is single player, always false on the server | ||
39 | - */ | ||
40 | - public abstract boolean isSinglePlayer(); | ||
41 | - | ||
42 | - /** | ||
43 | - * Get the underlying client instance, returns a dummy on the server | ||
44 | - */ | ||
45 | - public abstract TClient getClient(); | ||
46 | - | ||
47 | - /** | ||
48 | - * Get the underlying server instance | ||
49 | - */ | ||
50 | - public abstract TServer getServer(); | ||
51 | - | ||
52 | - /** | ||
53 | - * Get the resources manager | ||
54 | - */ | ||
55 | - public abstract Resources<?, ?> getResources(); | ||
56 | - | ||
57 | - /** | ||
58 | - * Get the profiler instance | ||
59 | - */ | ||
60 | - public abstract Profiler getProfiler(); | ||
61 | - | ||
62 | - /** | ||
63 | - * Get the keybinding list, only supported on client will throw an exception on the server | ||
64 | - */ | ||
65 | - public abstract List<KeyBinding> getKeyBindings(); | ||
66 | - | ||
67 | - /** | ||
68 | - * Set the keybinding list, only supported on client will throw an exception on the server | ||
69 | - * | ||
70 | - * @param keyBindings | ||
71 | - */ | ||
72 | - public abstract void setKeyBindings(List<KeyBinding> keyBindings); | ||
73 | -} | 1 | +package com.mumfrey.liteloader.common; |
2 | + | ||
3 | +import java.util.List; | ||
4 | + | ||
5 | +import net.minecraft.client.settings.KeyBinding; | ||
6 | +import net.minecraft.profiler.Profiler; | ||
7 | +import net.minecraft.server.MinecraftServer; | ||
8 | + | ||
9 | +/** | ||
10 | + * @author Adam Mummery-Smith | ||
11 | + * | ||
12 | + * @param <TClient> Type of the client runtime, "Minecraft" on client and null on the server | ||
13 | + * @param <TServer> Type of the server runtime, "IntegratedServer" on the client, "MinecraftServer" on the server | ||
14 | + */ | ||
15 | +public interface GameEngine<TClient, TServer extends MinecraftServer> | ||
16 | +{ | ||
17 | + /** | ||
18 | + * True if the environment is a client environment | ||
19 | + */ | ||
20 | + public abstract boolean isClient(); | ||
21 | + | ||
22 | + /** | ||
23 | + * True if the current environment is a server environment, always true on dedicated and true in single player | ||
24 | + */ | ||
25 | + public abstract boolean isServer(); | ||
26 | + | ||
27 | + /** | ||
28 | + * True if the client is "in game", always true on server | ||
29 | + */ | ||
30 | + public abstract boolean isInGame(); | ||
31 | + | ||
32 | + /** | ||
33 | + * True if the game loop's "isRunning" flag is true | ||
34 | + */ | ||
35 | + public abstract boolean isRunning(); | ||
36 | + | ||
37 | + /** | ||
38 | + * True if the current world is single player, always false on the server | ||
39 | + */ | ||
40 | + public abstract boolean isSinglePlayer(); | ||
41 | + | ||
42 | + /** | ||
43 | + * Get the underlying client instance, returns a dummy on the server | ||
44 | + */ | ||
45 | + public abstract TClient getClient(); | ||
46 | + | ||
47 | + /** | ||
48 | + * Get the underlying server instance | ||
49 | + */ | ||
50 | + public abstract TServer getServer(); | ||
51 | + | ||
52 | + /** | ||
53 | + * Get the resources manager | ||
54 | + */ | ||
55 | + public abstract Resources<?, ?> getResources(); | ||
56 | + | ||
57 | + /** | ||
58 | + * Get the profiler instance | ||
59 | + */ | ||
60 | + public abstract Profiler getProfiler(); | ||
61 | + | ||
62 | + /** | ||
63 | + * Get the keybinding list, only supported on client will throw an exception on the server | ||
64 | + */ | ||
65 | + public abstract List<KeyBinding> getKeyBindings(); | ||
66 | + | ||
67 | + /** | ||
68 | + * Set the keybinding list, only supported on client will throw an exception on the server | ||
69 | + * | ||
70 | + * @param keyBindings | ||
71 | + */ | ||
72 | + public abstract void setKeyBindings(List<KeyBinding> keyBindings); | ||
73 | +} |
java/common/com/mumfrey/liteloader/common/LoadingProgress.java renamed to src/main/java/com/mumfrey/liteloader/common/LoadingProgress.java
1 | -package com.mumfrey.liteloader.common; | ||
2 | - | ||
3 | -/** | ||
4 | - * @author Adam Mummery-Smith | ||
5 | - */ | ||
6 | -public abstract class LoadingProgress | ||
7 | -{ | ||
8 | - private static LoadingProgress instance; | ||
9 | - | ||
10 | - protected LoadingProgress() | ||
11 | - { | ||
12 | - LoadingProgress.instance = this; | ||
13 | - } | ||
14 | - | ||
15 | - public static void setEnabled(boolean enabled) | ||
16 | - { | ||
17 | - if (LoadingProgress.instance != null) LoadingProgress.instance._setEnabled(enabled); | ||
18 | - } | ||
19 | - | ||
20 | - public static void dispose() | ||
21 | - { | ||
22 | - if (LoadingProgress.instance != null) LoadingProgress.instance._dispose(); | ||
23 | - } | ||
24 | - | ||
25 | - public static void incLiteLoaderProgress() | ||
26 | - { | ||
27 | - if (LoadingProgress.instance != null) LoadingProgress.instance._incLiteLoaderProgress(); | ||
28 | - } | ||
29 | - | ||
30 | - public static void setMessage(String format, String... args) | ||
31 | - { | ||
32 | - if (LoadingProgress.instance != null) LoadingProgress.instance._setMessage(String.format(format, args)); | ||
33 | - } | ||
34 | - | ||
35 | - public static void setMessage(String message) | ||
36 | - { | ||
37 | - if (LoadingProgress.instance != null) LoadingProgress.instance._setMessage(message); | ||
38 | - } | ||
39 | - | ||
40 | - public static void incLiteLoaderProgress(String format, String... args) | ||
41 | - { | ||
42 | - if (LoadingProgress.instance != null) LoadingProgress.instance._incLiteLoaderProgress(String.format(format, args)); | ||
43 | - } | ||
44 | - | ||
45 | - public static void incLiteLoaderProgress(String message) | ||
46 | - { | ||
47 | - if (LoadingProgress.instance != null) LoadingProgress.instance._incLiteLoaderProgress(message); | ||
48 | - } | ||
49 | - | ||
50 | - public static void incTotalLiteLoaderProgress(int by) | ||
51 | - { | ||
52 | - if (LoadingProgress.instance != null) LoadingProgress.instance._incTotalLiteLoaderProgress(by); | ||
53 | - } | ||
54 | - | ||
55 | - protected abstract void _setEnabled(boolean enabled); | ||
56 | - | ||
57 | - protected abstract void _dispose(); | ||
58 | - | ||
59 | - protected abstract void _incLiteLoaderProgress(); | ||
60 | - | ||
61 | - protected abstract void _setMessage(String message); | ||
62 | - | ||
63 | - protected abstract void _incLiteLoaderProgress(String message); | ||
64 | - | ||
65 | - protected abstract void _incTotalLiteLoaderProgress(int by); | 1 | +package com.mumfrey.liteloader.common; |
2 | + | ||
3 | +/** | ||
4 | + * @author Adam Mummery-Smith | ||
5 | + */ | ||
6 | +public abstract class LoadingProgress | ||
7 | +{ | ||
8 | + private static LoadingProgress instance; | ||
9 | + | ||
10 | + protected LoadingProgress() | ||
11 | + { | ||
12 | + LoadingProgress.instance = this; | ||
13 | + } | ||
14 | + | ||
15 | + public static void setEnabled(boolean enabled) | ||
16 | + { | ||
17 | + if (LoadingProgress.instance != null) LoadingProgress.instance._setEnabled(enabled); | ||
18 | + } | ||
19 | + | ||
20 | + public static void dispose() | ||
21 | + { | ||
22 | + if (LoadingProgress.instance != null) LoadingProgress.instance._dispose(); | ||
23 | + } | ||
24 | + | ||
25 | + public static void incLiteLoaderProgress() | ||
26 | + { | ||
27 | + if (LoadingProgress.instance != null) LoadingProgress.instance._incLiteLoaderProgress(); | ||
28 | + } | ||
29 | + | ||
30 | + public static void setMessage(String format, String... args) | ||
31 | + { | ||
32 | + if (LoadingProgress.instance != null) LoadingProgress.instance._setMessage(String.format(format, args)); | ||
33 | + } | ||
34 | + | ||
35 | + public static void setMessage(String message) | ||
36 | + { | ||
37 | + if (LoadingProgress.instance != null) LoadingProgress.instance._setMessage(message); | ||
38 | + } | ||
39 | + | ||
40 | + public static void incLiteLoaderProgress(String format, String... args) | ||
41 | + { | ||
42 | + if (LoadingProgress.instance != null) LoadingProgress.instance._incLiteLoaderProgress(String.format(format, args)); | ||
43 | + } | ||
44 | + | ||
45 | + public static void incLiteLoaderProgress(String message) | ||
46 | + { | ||
47 | + if (LoadingProgress.instance != null) LoadingProgress.instance._incLiteLoaderProgress(message); | ||
48 | + } | ||
49 | + | ||
50 | + public static void incTotalLiteLoaderProgress(int by) | ||
51 | + { | ||
52 | + if (LoadingProgress.instance != null) LoadingProgress.instance._incTotalLiteLoaderProgress(by); | ||
53 | + } | ||
54 | + | ||
55 | + protected abstract void _setEnabled(boolean enabled); | ||
56 | + | ||
57 | + protected abstract void _dispose(); | ||
58 | + | ||
59 | + protected abstract void _incLiteLoaderProgress(); | ||
60 | + | ||
61 | + protected abstract void _setMessage(String message); | ||
62 | + | ||
63 | + protected abstract void _incLiteLoaderProgress(String message); | ||
64 | + | ||
65 | + protected abstract void _incTotalLiteLoaderProgress(int by); | ||
66 | } | 66 | } |
67 | \ No newline at end of file | 67 | \ No newline at end of file |
java/common/com/mumfrey/liteloader/common/Resources.java renamed to src/main/java/com/mumfrey/liteloader/common/Resources.java
1 | -package com.mumfrey.liteloader.common; | ||
2 | - | ||
3 | -public interface Resources<TResourceManager, TResourcePack> | ||
4 | -{ | ||
5 | - /** | ||
6 | - * Refresh resource pack list | ||
7 | - * | ||
8 | - * @param force | ||
9 | - */ | ||
10 | - public abstract void refreshResources(boolean force); | ||
11 | - | ||
12 | - /** | ||
13 | - * Get the resource manager for the current environment, returns the SimpleReloadableResourceManager on client and ModResourceManager on the server | ||
14 | - */ | ||
15 | - public abstract TResourceManager getResourceManager(); | ||
16 | - | ||
17 | - /** | ||
18 | - * @param resourcePack | ||
19 | - */ | ||
20 | - public abstract boolean registerResourcePack(TResourcePack resourcePack); | ||
21 | - | ||
22 | - /** | ||
23 | - * @param resourcePack | ||
24 | - */ | ||
25 | - public abstract boolean unRegisterResourcePack(TResourcePack resourcePack); | ||
26 | -} | 1 | +package com.mumfrey.liteloader.common; |
2 | + | ||
3 | +public interface Resources<TResourceManager, TResourcePack> | ||
4 | +{ | ||
5 | + /** | ||
6 | + * Refresh resource pack list | ||
7 | + * | ||
8 | + * @param force | ||
9 | + */ | ||
10 | + public abstract void refreshResources(boolean force); | ||
11 | + | ||
12 | + /** | ||
13 | + * Get the resource manager for the current environment, returns the SimpleReloadableResourceManager on client and ModResourceManager on the server | ||
14 | + */ | ||
15 | + public abstract TResourceManager getResourceManager(); | ||
16 | + | ||
17 | + /** | ||
18 | + * @param resourcePack | ||
19 | + */ | ||
20 | + public abstract boolean registerResourcePack(TResourcePack resourcePack); | ||
21 | + | ||
22 | + /** | ||
23 | + * @param resourcePack | ||
24 | + */ | ||
25 | + public abstract boolean unRegisterResourcePack(TResourcePack resourcePack); | ||
26 | +} |
java/common/com/mumfrey/liteloader/common/transformers/LiteLoaderEventTransformer.java renamed to src/main/java/com/mumfrey/liteloader/common/transformers/LiteLoaderEventTransformer.java
1 | -package com.mumfrey.liteloader.common.transformers; | ||
2 | - | ||
3 | -import static com.mumfrey.liteloader.core.runtime.Methods.*; | ||
4 | -import static com.mumfrey.liteloader.transformers.event.InjectionPoint.*; | ||
5 | - | ||
6 | -import org.objectweb.asm.Opcodes; | ||
7 | - | ||
8 | -import com.mumfrey.liteloader.core.runtime.Obf; | ||
9 | -import com.mumfrey.liteloader.transformers.event.Event; | ||
10 | -import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer; | ||
11 | -import com.mumfrey.liteloader.transformers.event.InjectionPoint; | ||
12 | -import com.mumfrey.liteloader.transformers.event.MethodInfo; | ||
13 | -import com.mumfrey.liteloader.transformers.event.inject.BeforeFieldAccess; | ||
14 | -import com.mumfrey.liteloader.transformers.event.inject.BeforeInvoke; | ||
15 | -import com.mumfrey.liteloader.transformers.event.inject.BeforeNew; | ||
16 | -import com.mumfrey.liteloader.transformers.event.inject.BeforeReturn; | ||
17 | -import com.mumfrey.liteloader.transformers.event.inject.MethodHead; | ||
18 | - | ||
19 | -/** | ||
20 | - * Injector for LiteLoader's common events | ||
21 | - * | ||
22 | - * @author Adam Mummery-Smith | ||
23 | - */ | ||
24 | -public abstract class LiteLoaderEventTransformer extends EventInjectionTransformer | ||
25 | -{ | ||
26 | - protected abstract Obf getProxy(); | ||
27 | - | ||
28 | - @Override | ||
29 | - protected void addEvents() | ||
30 | - { | ||
31 | - // Event declarations | ||
32 | - Event onInitializePlayerConnection = Event.getOrCreate("onInitializePlayerConnection", false); | ||
33 | - Event onPlayerLogin = Event.getOrCreate("onPlayerLogin", false); | ||
34 | - Event onPlayerLogout = Event.getOrCreate("onPlayerLogout", false); | ||
35 | - Event onSpawnPlayer = Event.getOrCreate("onSpawnPlayer", false); | ||
36 | - Event onRespawnPlayer = Event.getOrCreate("onRespawnPlayer", false); | ||
37 | - Event onServerTick = Event.getOrCreate("onServerTick", false); | ||
38 | - Event onBlockClickedEvent = Event.getOrCreate("onBlockClicked", true); | ||
39 | - Event onActivateBlockOrUseItem = Event.getOrCreate("onActivateBlockOrUseItem", true); | ||
40 | - Event onPlayerDigging = Event.getOrCreate("onPlayerDigging", true); | ||
41 | - Event onPlaceBlock = Event.getOrCreate("onPlaceBlock", true); | ||
42 | - Event onClickedAir = Event.getOrCreate("onClickedAir", true); | ||
43 | - Event onSessionProfileBad = Event.getOrCreate("onSessionProfileBad", true); | ||
44 | - Event onPlayerMoved = Event.getOrCreate("onPlayerMoved", true); | ||
45 | - | ||
46 | - // Injection Points | ||
47 | - InjectionPoint methodHead = new MethodHead(); | ||
48 | - InjectionPoint methodReturn = new BeforeReturn(); | ||
49 | - InjectionPoint beforeNewGameProfile = new BeforeNew(1, Obf.GameProfile); | ||
50 | - InjectionPoint beforeThreadMarshall = new BeforeInvoke(checkThreadAndEnqueue); | ||
51 | - InjectionPoint beforeGetPosY = new BeforeFieldAccess(Opcodes.GETFIELD, Obf.entityPosY, Obf.EntityPlayerMP, 4).setCaptureLocals(true); | ||
52 | - | ||
53 | - // Hooks | ||
54 | - this.add(onInitializePlayerConnection, initPlayerConnection, (methodReturn), "onInitializePlayerConnection"); | ||
55 | - this.add(onPlayerLogin, playerLoggedIn, (methodReturn), "onPlayerLogin"); | ||
56 | - this.add(onPlayerLogout, playerLoggedOut, (methodReturn), "onPlayerLogout"); | ||
57 | - this.add(onSpawnPlayer, spawnPlayer, (methodReturn), "onSpawnPlayer"); | ||
58 | - this.add(onRespawnPlayer, respawnPlayer, (methodReturn), "onRespawnPlayer"); | ||
59 | - this.add(onServerTick, serverJobs, (methodHead), "onServerTick"); | ||
60 | - this.add(onBlockClickedEvent, onBlockClicked, (methodHead), "onBlockClicked"); | ||
61 | - this.add(onActivateBlockOrUseItem, activateBlockOrUseItem, (methodHead), "onUseItem"); | ||
62 | - this.add(onPlaceBlock, processBlockPlacement, after(beforeThreadMarshall) , "onPlaceBlock"); | ||
63 | - this.add(onClickedAir, handleAnimation, after(beforeThreadMarshall), "onClickedAir"); | ||
64 | - this.add(onPlayerDigging, processPlayerDigging, after(beforeThreadMarshall), "onPlayerDigging"); | ||
65 | - this.add(onPlayerMoved, processPlayer, (beforeGetPosY), "onPlayerMoved"); | ||
66 | - | ||
67 | - // Compatibility handlers | ||
68 | - this.add(onSessionProfileBad, getProfile, (beforeNewGameProfile), "generateOfflineUUID"); | ||
69 | - } | ||
70 | - | ||
71 | - protected final Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback) | ||
72 | - { | ||
73 | - return this.add(event, targetMethod, injectionPoint, callback, this.getProxy()); | ||
74 | - } | ||
75 | - | ||
76 | - protected Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback, Obf proxy) | ||
77 | - { | ||
78 | - return this.addEvent(event, targetMethod, injectionPoint).addListener(new MethodInfo(proxy, callback)); | ||
79 | - } | ||
80 | -} | 1 | +package com.mumfrey.liteloader.common.transformers; |
2 | + | ||
3 | +import static com.mumfrey.liteloader.core.runtime.Methods.*; | ||
4 | +import static com.mumfrey.liteloader.transformers.event.InjectionPoint.*; | ||
5 | + | ||
6 | +import org.objectweb.asm.Opcodes; | ||
7 | + | ||
8 | +import com.mumfrey.liteloader.core.runtime.Obf; | ||
9 | +import com.mumfrey.liteloader.transformers.event.Event; | ||
10 | +import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer; | ||
11 | +import com.mumfrey.liteloader.transformers.event.InjectionPoint; | ||
12 | +import com.mumfrey.liteloader.transformers.event.MethodInfo; | ||
13 | +import com.mumfrey.liteloader.transformers.event.inject.BeforeFieldAccess; | ||
14 | +import com.mumfrey.liteloader.transformers.event.inject.BeforeInvoke; | ||
15 | +import com.mumfrey.liteloader.transformers.event.inject.BeforeNew; | ||
16 | +import com.mumfrey.liteloader.transformers.event.inject.BeforeReturn; | ||
17 | +import com.mumfrey.liteloader.transformers.event.inject.MethodHead; | ||
18 | + | ||
19 | +/** | ||
20 | + * Injector for LiteLoader's common events | ||
21 | + * | ||
22 | + * @author Adam Mummery-Smith | ||
23 | + */ | ||
24 | +public abstract class LiteLoaderEventTransformer extends EventInjectionTransformer | ||
25 | +{ | ||
26 | + protected abstract Obf getProxy(); | ||
27 | + | ||
28 | + @Override | ||
29 | + protected void addEvents() | ||
30 | + { | ||
31 | + // Event declarations | ||
32 | + Event onInitializePlayerConnection = Event.getOrCreate("onInitializePlayerConnection", false); | ||
33 | + Event onPlayerLogin = Event.getOrCreate("onPlayerLogin", false); | ||
34 | + Event onPlayerLogout = Event.getOrCreate("onPlayerLogout", false); | ||
35 | + Event onSpawnPlayer = Event.getOrCreate("onSpawnPlayer", false); | ||
36 | + Event onRespawnPlayer = Event.getOrCreate("onRespawnPlayer", false); | ||
37 | + Event onServerTick = Event.getOrCreate("onServerTick", false); | ||
38 | + Event onBlockClickedEvent = Event.getOrCreate("onBlockClicked", true); | ||
39 | + Event onActivateBlockOrUseItem = Event.getOrCreate("onActivateBlockOrUseItem", true); | ||
40 | + Event onPlayerDigging = Event.getOrCreate("onPlayerDigging", true); | ||
41 | + Event onPlaceBlock = Event.getOrCreate("onPlaceBlock", true); | ||
42 | + Event onClickedAir = Event.getOrCreate("onClickedAir", true); | ||
43 | + Event onSessionProfileBad = Event.getOrCreate("onSessionProfileBad", true); | ||
44 | + Event onPlayerMoved = Event.getOrCreate("onPlayerMoved", true); | ||
45 | + | ||
46 | + // Injection Points | ||
47 | + InjectionPoint methodHead = new MethodHead(); | ||
48 | + InjectionPoint methodReturn = new BeforeReturn(); | ||
49 | + InjectionPoint beforeNewGameProfile = new BeforeNew(1, Obf.GameProfile); | ||
50 | + InjectionPoint beforeThreadMarshall = new BeforeInvoke(checkThreadAndEnqueue); | ||
51 | + InjectionPoint beforeGetPosY = new BeforeFieldAccess(Opcodes.GETFIELD, Obf.entityPosY, Obf.EntityPlayerMP, 4).setCaptureLocals(true); | ||
52 | + | ||
53 | + // Hooks | ||
54 | + this.add(onInitializePlayerConnection, initPlayerConnection, (methodReturn), "onInitializePlayerConnection"); | ||
55 | + this.add(onPlayerLogin, playerLoggedIn, (methodReturn), "onPlayerLogin"); | ||
56 | + this.add(onPlayerLogout, playerLoggedOut, (methodReturn), "onPlayerLogout"); | ||
57 | + this.add(onSpawnPlayer, spawnPlayer, (methodReturn), "onSpawnPlayer"); | ||
58 | + this.add(onRespawnPlayer, respawnPlayer, (methodReturn), "onRespawnPlayer"); | ||
59 | + this.add(onServerTick, serverJobs, (methodHead), "onServerTick"); | ||
60 | + this.add(onBlockClickedEvent, onBlockClicked, (methodHead), "onBlockClicked"); | ||
61 | + this.add(onActivateBlockOrUseItem, activateBlockOrUseItem, (methodHead), "onUseItem"); | ||
62 | + this.add(onPlaceBlock, processBlockPlacement, after(beforeThreadMarshall) , "onPlaceBlock"); | ||
63 | + this.add(onClickedAir, handleAnimation, after(beforeThreadMarshall), "onClickedAir"); | ||
64 | + this.add(onPlayerDigging, processPlayerDigging, after(beforeThreadMarshall), "onPlayerDigging"); | ||
65 | + this.add(onPlayerMoved, processPlayer, (beforeGetPosY), "onPlayerMoved"); | ||
66 | + | ||
67 | + // Compatibility handlers | ||
68 | + this.add(onSessionProfileBad, getProfile, (beforeNewGameProfile), "generateOfflineUUID"); | ||
69 | + } | ||
70 | + | ||
71 | + protected final Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback) | ||
72 | + { | ||
73 | + return this.add(event, targetMethod, injectionPoint, callback, this.getProxy()); | ||
74 | + } | ||
75 | + | ||
76 | + protected Event add(Event event, MethodInfo targetMethod, InjectionPoint injectionPoint, String callback, Obf proxy) | ||
77 | + { | ||
78 | + return this.addEvent(event, targetMethod, injectionPoint).addListener(new MethodInfo(proxy, callback)); | ||
79 | + } | ||
80 | +} |
java/common/com/mumfrey/liteloader/common/transformers/LiteLoaderPacketTransformer.java renamed to src/main/java/com/mumfrey/liteloader/common/transformers/LiteLoaderPacketTransformer.java
1 | -package com.mumfrey.liteloader.common.transformers; | ||
2 | - | ||
3 | -import com.mumfrey.liteloader.core.runtime.Obf; | ||
4 | -import com.mumfrey.liteloader.core.runtime.Packets; | ||
5 | -import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer; | ||
6 | -import com.mumfrey.liteloader.transformers.event.InjectionPoint; | ||
7 | -import com.mumfrey.liteloader.transformers.event.MethodInfo; | ||
8 | -import com.mumfrey.liteloader.transformers.event.inject.MethodHead; | ||
9 | - | ||
10 | -public class LiteLoaderPacketTransformer extends EventInjectionTransformer | ||
11 | -{ | ||
12 | - @Override | ||
13 | - protected void addEvents() | ||
14 | - { | ||
15 | - InjectionPoint methodHead = new MethodHead(); | ||
16 | - MethodInfo handlePacket = new MethodInfo(Obf.PacketEvents, "handlePacket"); | ||
17 | - | ||
18 | - for (Packets packet : Packets.packets) | ||
19 | - { | ||
20 | - MethodInfo processPacket = new MethodInfo(packet, Obf.processPacket, Void.TYPE, Obf.INetHandler); | ||
21 | - this.addEvent(new PacketEvent(packet), processPacket, methodHead).addListener(handlePacket); | ||
22 | - } | ||
23 | - } | ||
24 | -} | 1 | +package com.mumfrey.liteloader.common.transformers; |
2 | + | ||
3 | +import com.mumfrey.liteloader.core.runtime.Obf; | ||
4 | +import com.mumfrey.liteloader.core.runtime.Packets; | ||
5 | +import com.mumfrey.liteloader.transformers.event.EventInjectionTransformer; | ||
6 | +import com.mumfrey.liteloader.transformers.event.InjectionPoint; | ||
7 | +import com.mumfrey.liteloader.transformers.event.MethodInfo; | ||
8 | +import com.mumfrey.liteloader.transformers.event.inject.MethodHead; | ||
9 | + | ||
10 | +public class LiteLoaderPacketTransformer extends EventInjectionTransformer | ||
11 | +{ | ||
12 | + @Override | ||
13 | + protected void addEvents() | ||
14 | + { | ||
15 | + InjectionPoint methodHead = new MethodHead(); | ||
16 | + MethodInfo handlePacket = new MethodInfo(Obf.PacketEvents, "handlePacket"); | ||
17 | + | ||
18 | + for (Packets packet : Packets.packets) | ||
19 | + { | ||
20 | + MethodInfo processPacket = new MethodInfo(packet, Obf.processPacket, Void.TYPE, Obf.INetHandler); | ||
21 | + this.addEvent(new PacketEvent(packet), processPacket, methodHead).addListener(handlePacket); | ||
22 | + } | ||
23 | + } | ||
24 | +} |
java/common/com/mumfrey/liteloader/common/transformers/PacketEvent.java renamed to src/main/java/com/mumfrey/liteloader/common/transformers/PacketEvent.java
1 | -package com.mumfrey.liteloader.common.transformers; | ||
2 | - | ||
3 | -import org.objectweb.asm.Opcodes; | ||
4 | -import org.objectweb.asm.tree.InsnList; | ||
5 | -import org.objectweb.asm.tree.InsnNode; | ||
6 | -import org.objectweb.asm.tree.IntInsnNode; | ||
7 | -import org.objectweb.asm.tree.LdcInsnNode; | ||
8 | -import org.objectweb.asm.tree.MethodInsnNode; | ||
9 | -import org.objectweb.asm.tree.VarInsnNode; | ||
10 | - | ||
11 | -import com.mumfrey.liteloader.core.runtime.Obf; | ||
12 | -import com.mumfrey.liteloader.core.runtime.Packets; | ||
13 | -import com.mumfrey.liteloader.transformers.event.Event; | ||
14 | -import com.mumfrey.liteloader.transformers.event.EventInfo; | ||
15 | - | ||
16 | -/** | ||
17 | - * Special event used to hook all packets | ||
18 | - * | ||
19 | - * @author Adam Mummery-Smith | ||
20 | - */ | ||
21 | -public class PacketEvent extends Event | ||
22 | -{ | ||
23 | - /** | ||
24 | - * Soft index for this packet, used as a lookup for speed when determining handlers | ||
25 | - */ | ||
26 | - private int packetIndex; | ||
27 | - | ||
28 | - PacketEvent(Packets packet) | ||
29 | - { | ||
30 | - super("on" + packet.getShortName(), true, 1000); | ||
31 | - this.packetIndex = packet.getIndex(); | ||
32 | - this.verbose = false; | ||
33 | - } | ||
34 | - | ||
35 | - /* (non-Javadoc) | ||
36 | - * @see com.mumfrey.liteloader.transformers.event.Event#getEventInfoClassName() | ||
37 | - */ | ||
38 | - @Override | ||
39 | - public String getEventInfoClassName() | ||
40 | - { | ||
41 | - return "com/mumfrey/liteloader/common/transformers/PacketEventInfo"; | ||
42 | - } | ||
43 | - | ||
44 | - /* (non-Javadoc) | ||
45 | - * @see com.mumfrey.liteloader.transformers.event.Event#invokeEventInfoConstructor(org.objectweb.asm.tree.InsnList, boolean) | ||
46 | - */ | ||
47 | - @Override | ||
48 | - protected int invokeEventInfoConstructor(InsnList insns, boolean cancellable, boolean pushReturnValue, int marshallVar) | ||
49 | - { | ||
50 | - int ctorMAXS = 0; | ||
51 | - | ||
52 | - insns.add(new LdcInsnNode(this.name)); ctorMAXS++; | ||
53 | - insns.add(this.methodIsStatic ? new InsnNode(Opcodes.ACONST_NULL) : new VarInsnNode(Opcodes.ALOAD, 0)); ctorMAXS++; | ||
54 | - insns.add(new InsnNode(cancellable ? Opcodes.ICONST_1 : Opcodes.ICONST_0)); ctorMAXS++; | ||
55 | - insns.add(new IntInsnNode(Opcodes.BIPUSH, this.packetIndex)); | ||
56 | - insns.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, this.eventInfoClass, Obf.constructor.name, EventInfo.getConstructorDescriptor().replace(")", "I)"), false)); | ||
57 | - | ||
58 | - return ctorMAXS; | ||
59 | - } | ||
60 | -} | 1 | +package com.mumfrey.liteloader.common.transformers; |
2 | + | ||
3 | +import org.objectweb.asm.Opcodes; | ||
4 | +import org.objectweb.asm.tree.InsnList; | ||
5 | +import org.objectweb.asm.tree.InsnNode; | ||
6 | +import org.objectweb.asm.tree.IntInsnNode; | ||
7 | +import org.objectweb.asm.tree.LdcInsnNode; | ||
8 | +import org.objectweb.asm.tree.MethodInsnNode; | ||
9 | +import org.objectweb.asm.tree.VarInsnNode; | ||
10 | + | ||
11 | +import com.mumfrey.liteloader.core.runtime.Obf; | ||
12 | +import com.mumfrey.liteloader.core.runtime.Packets; | ||
13 | +import com.mumfrey.liteloader.transformers.event.Event; | ||
14 | +import com.mumfrey.liteloader.transformers.event.EventInfo; | ||
15 | + | ||
16 | +/** | ||
17 | + * Special event used to hook all packets | ||
18 | + * | ||
19 | + * @author Adam Mummery-Smith | ||
20 | + */ | ||
21 | +public class PacketEvent extends Event | ||
22 | +{ | ||
23 | + /** | ||
24 | + * Soft index for this packet, used as a lookup for speed when determining handlers | ||
25 | + */ | ||
26 | + private int packetIndex; | ||
27 | + | ||
28 | + PacketEvent(Packets packet) | ||
29 | + { | ||
30 | + super("on" + packet.getShortName(), true, 1000); | ||
31 | + this.packetIndex = packet.getIndex(); | ||
32 | + this.verbose = false; | ||
33 | + } | ||
34 | + | ||
35 | + /* (non-Javadoc) | ||
36 | + * @see com.mumfrey.liteloader.transformers.event.Event#getEventInfoClassName() | ||
37 | + */ | ||
38 | + @Override | ||
39 | + public String getEventInfoClassName() | ||
40 | + { | ||
41 | + return "com/mumfrey/liteloader/common/transformers/PacketEventInfo"; | ||
42 | + } | ||
43 | + | ||
44 | + /* (non-Javadoc) | ||
45 | + * @see com.mumfrey.liteloader.transformers.event.Event#invokeEventInfoConstructor(org.objectweb.asm.tree.InsnList, boolean) | ||
46 | + */ | ||
47 | + @Override | ||
48 | + protected int invokeEventInfoConstructor(InsnList insns, boolean cancellable, boolean pushReturnValue, int marshallVar) | ||
49 | + { | ||
50 | + int ctorMAXS = 0; | ||
51 | + | ||
52 | + insns.add(new LdcInsnNode(this.name)); ctorMAXS++; | ||
53 | + insns.add(this.methodIsStatic ? new InsnNode(Opcodes.ACONST_NULL) : new VarInsnNode(Opcodes.ALOAD, 0)); ctorMAXS++; | ||
54 | + insns.add(new InsnNode(cancellable ? Opcodes.ICONST_1 : Opcodes.ICONST_0)); ctorMAXS++; | ||
55 | + insns.add(new IntInsnNode(Opcodes.BIPUSH, this.packetIndex)); | ||
56 | + insns.add(new MethodInsnNode(Opcodes.INVOKESPECIAL, this.eventInfoClass, Obf.constructor.name, EventInfo.getConstructorDescriptor().replace(")", "I)"), false)); | ||
57 | + | ||
58 | + return ctorMAXS; | ||
59 | + } | ||
60 | +} |
java/common/com/mumfrey/liteloader/common/transformers/PacketEventInfo.java renamed to src/main/java/com/mumfrey/liteloader/common/transformers/PacketEventInfo.java
1 | -package com.mumfrey.liteloader.common.transformers; | ||
2 | - | ||
3 | -import com.mumfrey.liteloader.transformers.event.EventInfo; | ||
4 | - | ||
5 | -import net.minecraft.network.Packet; | ||
6 | - | ||
7 | -public class PacketEventInfo<S extends Packet> extends EventInfo<S> | ||
8 | -{ | ||
9 | - private final int packetId; | ||
10 | - | ||
11 | - @SuppressWarnings("unchecked") | ||
12 | - public PacketEventInfo(String name, Object source, boolean cancellable, int packetId) | ||
13 | - { | ||
14 | - super(name, (S)source, cancellable); | ||
15 | - | ||
16 | - this.packetId = packetId; | ||
17 | - } | ||
18 | - | ||
19 | - public int getPacketId() | ||
20 | - { | ||
21 | - return this.packetId; | ||
22 | - } | ||
23 | -} | 1 | +package com.mumfrey.liteloader.common.transformers; |
2 | + | ||
3 | +import com.mumfrey.liteloader.transformers.event.EventInfo; | ||
4 | + | ||
5 | +import net.minecraft.network.Packet; | ||
6 | + | ||
7 | +public class PacketEventInfo<S extends Packet> extends EventInfo<S> | ||
8 | +{ | ||
9 | + private final int packetId; | ||
10 | + | ||
11 | + @SuppressWarnings("unchecked") | ||
12 | + public PacketEventInfo(String name, Object source, boolean cancellable, int packetId) | ||
13 | + { | ||
14 | + super(name, (S)source, cancellable); | ||
15 | + | ||
16 | + this.packetId = packetId; | ||
17 | + } | ||
18 | + | ||
19 | + public int getPacketId() | ||
20 | + { | ||
21 | + return this.packetId; | ||
22 | + } | ||
23 | +} |
java/common/com/mumfrey/liteloader/core/BadContainerInfo.java renamed to src/main/java/com/mumfrey/liteloader/core/BadContainerInfo.java
1 | -package com.mumfrey.liteloader.core; | ||
2 | - | ||
3 | -import com.mumfrey.liteloader.core.api.LoadableModFile; | ||
4 | -import com.mumfrey.liteloader.interfaces.Loadable; | ||
5 | - | ||
6 | -/** | ||
7 | - * ModInfo for invalid containers | ||
8 | - * | ||
9 | - * @author Adam Mummery-Smith | ||
10 | - */ | ||
11 | -public class BadContainerInfo extends NonMod | ||
12 | -{ | ||
13 | - /** | ||
14 | - * Reason the container could not be loaded | ||
15 | - */ | ||
16 | - private final String reason; | ||
17 | - | ||
18 | - public BadContainerInfo(Loadable<?> container, String reason) | ||
19 | - { | ||
20 | - super(container, false); | ||
21 | - this.reason = reason; | ||
22 | - } | ||
23 | - | ||
24 | - /* (non-Javadoc) | ||
25 | - * @see com.mumfrey.liteloader.core.ModInfo#isToggleable() | ||
26 | - */ | ||
27 | - @Override | ||
28 | - public boolean isToggleable() | ||
29 | - { | ||
30 | - return false; | ||
31 | - } | ||
32 | - | ||
33 | - /* (non-Javadoc) | ||
34 | - * @see com.mumfrey.liteloader.core.ModInfo#isValid() | ||
35 | - */ | ||
36 | - @Override | ||
37 | - public boolean isValid() | ||
38 | - { | ||
39 | - return false; | ||
40 | - } | ||
41 | - | ||
42 | - /* (non-Javadoc) | ||
43 | - * @see com.mumfrey.liteloader.core.ModInfo#getDescription() | ||
44 | - */ | ||
45 | - @Override | ||
46 | - public String getDescription() | ||
47 | - { | ||
48 | - return "\247c" + this.reason; | ||
49 | - } | ||
50 | - | ||
51 | - /* (non-Javadoc) | ||
52 | - * @see com.mumfrey.liteloader.core.ModInfo#getVersion() | ||
53 | - */ | ||
54 | - @Override | ||
55 | - public String getVersion() | ||
56 | - { | ||
57 | - if (this.container instanceof LoadableModFile) | ||
58 | - { | ||
59 | - return "supported: \247c" + ((LoadableModFile)this.container).getTargetVersion() + "\247r"; | ||
60 | - } | ||
61 | - | ||
62 | - return "supported: \247cUnknown"; | ||
63 | - } | ||
64 | -} | 1 | +package com.mumfrey.liteloader.core; |
2 | + | ||
3 | +import com.mumfrey.liteloader.core.api.LoadableModFile; | ||
4 | +import com.mumfrey.liteloader.interfaces.Loadable; | ||
5 | + | ||
6 | +/** | ||
7 | + * ModInfo for invalid containers | ||
8 | + * | ||
9 | + * @author Adam Mummery-Smith | ||
10 | + */ | ||
11 | +public class BadContainerInfo extends NonMod | ||
12 | +{ | ||
13 | + /** | ||
14 | + * Reason the container could not be loaded | ||
15 | + */ | ||
16 | + private final String reason; | ||
17 | + | ||
18 | + public BadContainerInfo(Loadable<?> container, String reason) | ||
19 | + { | ||
20 | + super(container, false); | ||
21 | + this.reason = reason; | ||
22 | + } | ||
23 | + | ||
24 | + /* (non-Javadoc) | ||
25 | + * @see com.mumfrey.liteloader.core.ModInfo#isToggleable() | ||
26 | + */ | ||
27 | + @Override | ||
28 | + public boolean isToggleable() | ||
29 | + { | ||
30 | + return false; | ||
31 | + } | ||
32 | + | ||
33 | + /* (non-Javadoc) | ||
34 | + * @see com.mumfrey.liteloader.core.ModInfo#isValid() | ||
35 | + */ | ||
36 | + @Override | ||
37 | + public boolean isValid() | ||
38 | + { | ||
39 | + return false; | ||
40 | + } | ||
41 | + | ||
42 | + /* (non-Javadoc) | ||
43 | + * @see com.mumfrey.liteloader.core.ModInfo#getDescription() | ||
44 | + */ | ||
45 | + @Override | ||
46 | + public String getDescription() | ||
47 | + { | ||
48 | + return "\247c" + this.reason; | ||
49 | + } | ||
50 | + | ||
51 | + /* (non-Javadoc) | ||
52 | + * @see com.mumfrey.liteloader.core.ModInfo#getVersion() | ||
53 | + */ | ||
54 | + @Override | ||
55 | + public String getVersion() | ||
56 | + { | ||
57 | + if (this.container instanceof LoadableModFile) | ||
58 | + { | ||
59 | + return "supported: \247c" + ((LoadableModFile)this.container).getTargetVersion() + "\247r"; | ||
60 | + } | ||
61 | + | ||
62 | + return "supported: \247cUnknown"; | ||
63 | + } | ||
64 | +} |