Creating A Custom Fragment Generator Lua
If you just want to create a new Fragment generator for other events or just a basic one then you can use Lua to create one
First create a new folder in /Isets/
named fragment-generators should be like /Isets/fragment-generators/
Once that is done you should create a new file you can name it what you want for this guide i will name it example-generator.Lua
Creating the generator file
we will create a generator for the BlockBreakEvent
it will do the same thing as the generator that comes with the plugin
package.path = pluginFolder .. "\\fragment-generators\\listeners\\?.lua"
require "BlockBreakEvent"
namespace = "example"
source = "blockBreakEvent"
require "BlockBreakEvent"
function handleGeneration(player, settingsMap)
if settingsMap:getBoolean("Enabled") and math.random() <= settingsMap:getDouble("Chance") then
local amount = (settingsMap:getDouble("Amount_To_Give") <= 0) and 1 or settingsMap:getDouble("Amount_To_Give")
local fragment = utils.findFragment(player)
if fragment ~= nil then
if settingsMap:getBoolean("Physical") then
givePhys(player, amount, fragment)
else
giveVirtual(player, amount, fragment)
end
end
end
end
function givePhys(player, amount, fragment)
fragment:giveOrUpdateFragment(player, math.floor(amount), false)
utils.tell(player, "&2You been given " .. amount .. " &6fragments &2for &6" .. fragment:getArmorSetName())
end
function giveVirtual(player, amount, fragment)
local cache = utils.getCache(player)
local currentBalance = cache:getFragmentAmount(fragment:getArmorSetName())
cache:updateFragmentAmount(fragment.armorSetName, currentVirtualBalance + math.floor(amount))
utils.tell(player, "&2You been given " .. amount .. " &6fragments &2for &6" .. fragment:getArmorSetName())
end
Registering an event listener
to actually create a listener for the BlockBreakEvent
you should first create a folder inside /Isets/
in this example we are calling the folder listeners so /Isets/fragment-generators/listeners/
same as before create a new file you can name it as you please, in this case we name it BlockBreak.lua
utils.subscribeToEvent("org.bukkit.event.block.BlockBreakEvent", function(event)
local player = event:getPlayer()
local armorSet = utils.findArmorSet(utils.getCache(player):getArmorSetFragmentGen())
if armorSet ~= nil then
local type = armorSet:getFragmentGeneration():getString("Type")
local source = armorSet:getFragmentGeneration():getString("Source")
local fragmentGenerator = utils.findFragmentGenerator(type, source)
if fragmentGenerator == nil then
return
end
if type == namespace then
local disabledWorlds = armorSet:getFragmentGeneration():getStringList("Disabled_Worlds")
local worldName = player:getWorld():getName()
for i = 0, disabledWorlds:size() -1 do
if disabledWorlds:get(i) == worldName then
return
end
end
fragmentGenerator:handleGeneration(player, armorSet:getFragmentGeneration())
end
end
end)
Utils package
the utils package has a few utility functions
Util to register an event listener
subscribeToEvent("path to event class", function(event)
--Code here
end)
Util to find a armor set if it exists will return nil if none was found
findArmorSet("name of the armor set")
Util to find a fragment generator if it exists will return nil if none was found
findFragmentGenerator("type/namespace", "source")
Util to get the cache of a Player will return nil if the cache cant be found if one is found it will return the cache
getCache(player)
Util to find the current enabled fragment generator a player has enabled will return "none" if one isnt set will return the name of the armor set they enabled the generator for.
findFragment(player)
Util to send a message to a player it will auto translate colors
tell(player, "message goes here color codes and hex is automaticly translated")