Files
Gary Tierney b047d0197a Add a plugin which allows creating mixins for Mobs
Adds a mob-extension plugin, which allows creating modules as mixins to
be monkey-patched into the Mob class.  Having a standard method of doing
this prevents confusing problems with mixin name conflicts, by allowing
the plugin to raise an error that 2 mixins with the same name exist.
2017-01-01 08:13:09 +00:00

20 lines
553 B
Ruby

require 'java'
java_import 'org.apollo.game.model.entity.Mob'
module MobExtension
MOB_EXTENSIONS = []
def self.register(extension)
fail 'Provided extension object is not a module' unless extension.is_a?(Module)
new_mixins = extension.public_instance_methods
current_mixins = MOB_EXTENSIONS.map { |e| {e.to_s => e.public_instance_methods} }
current_mixins.each do |ext, methods|
methods.each {|m| fail "Extension #{ext} already provides method #{m}" if new_mixins.include?(m) }
end
Mob.include(extension)
end
end