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 | +} |