[Discontinued] 🛠 ActionControl [v1.1] - Control crafting, mining, combat and more!

Will there be a feature to control dropping of specific items soon?

What do you mean by dropping? Players dropping items out of their inventory, mobs dropping items when they die or blocks dropping items when they get destroyed?

ah sorry for not being specific there. I meant it as players dropping items out of their inventory. If possible, also make it so if a chest has that certain item inside it can’t be broken? Generally we have badges in the server which shouldn’t be passed around.

It should be possible somehow to deny players dropping items out of their inventory. But what if the player dies?

Also I played a bit around with chests and the data api and found at that it’s currently not possible to match the contents of a chest by matching the nbt tags. Instead you have to use the TileEntity api, which does not suit ActionControl.
For such a specific problem, I would suggest looking for someone who writes a custom plugin for you.

1 Like

Ahh see, we do have keepInventory enabled though, but the chest part doesn’t seem possible right now. Thanks for considering the idea :smiley:

If I understand this plugin correctly, maybe you could add an action control for when a player dies?

Like in LOZ when Link dies it plays a silly midi death sound. So for this when a player dies it will execute a sound command to the player who dies.

Also a few other options:
When a player earns xp
when a player earns an achievement

I think these things are out of the scope of ActionControl.
ActionControl will only handle events that are

  • Initiated by a player (An action performed by a player)
  • Cancellable and completely resettable (e.g. breaking a block can completely reverted if you want but earning an achievement or similar things can’t)

It would be better to use a separate plugin for this but I don’t know if there is already a plugin lets you react to all kinds of events like players dying or earning xp.

I tried to illustrate this report.
The first has been good.
pokeball has been applied to others doeeoteoyo not apply.
But later it was applied afterwards even pokeball.
What’s the problem?

craft {
    filter {
        result = "{'type': 'pixelmon:item.Poke_Ball'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'pixelmon:RubyAxe'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'minecraft:ender_chest'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'minecraft:ender_table'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'minecraft:anvil'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'pixelmon:item.Healer'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'pixelmon:item.Ranch_Block'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'pixelmon:item.Cloning_Machine'}"
    },
    response {
        match = "deny"
    }
},

craft {
    filter {
        result = "{'type': 'pixelmon:item.MechanicalAnvil'}"
    },
    response {
        match = "deny"
    }
},

You can’t declare multiple craft rules. Instead you have to put everything inside one craft rule.
You can furthremore use | as an or conjuntion to shorten your config:

craft { filter { result = "{'type': 'pixelmon:item.Poke_Ball' | 'pixelmon:RubyAxe' | 'minecraft:ender_chest'}" }, response { match = "deny" } }

I just realized that the Ore page including the documentation got deleted. I will try to fix that as fast as possible but since I didn’t back it up, I have to manually convert the docs to Markdown again … :frowning:

1 Like

Hey @milchshakee You can get to your documentation here: http://actioncontrol.readthedocs.io/introduction.html#installation

Second thing I wanted to ask. I used your plugin and its awesome. Very helpful for my server, however I had a player discover a bug. When they attempt to craft it they cannot do so by pulling it out of the crafting table, BUT if they go to craft it and the recipe is completed and they click drop button it will still create the item even if the crafting is denied.

Here’s a picture of whats happening: Screen capture - 02d9019024663d14f32766c91234c929 - Gyazo

I know that the doc is hosted there, but it’s written in another markup language and a little bit outdated since I only updated the Ore docs. (Yeah I know, I should have made some backups :expressionless:)

It didn’t even know it was possible to drop an item out of an inventory like this, maybe I should play more Minecraft instead of making plugins :smiley:.
I will try a find a way to fix that.

Haha All good I wasnt entirely sure myself until a player of mine reported it as a bug. Thanks for the great plugin it definitely has stopped quite a bit of my economy issues on my server!

The Ore page including the documentation is up again.

Not seeing the permissions in the documentation.

A case of nub-blindness or are they just not there? :slight_smile:

ActionControl does not use permissions the same way as other plugins do. Instead, you create a player filter in each configuration file that specifies on which players the rules in that file should be applied on.
The player filters can check if a player has a specific permission, but they can check for much more if you want.

The Small RPG system example in the documentation shows you how to match players without a specific permission, which is basically what you are looking for.

The only real permission that is used by ActionControl is actioncontrol.reload, which allows you to reload the configuration file(s).

The only way to fix this right now is by disabling dropping items like this entirely. The new version 1.0.6 does exactly this.
I can fix this bug completely when the Sponge Inventory API is completely implemented, but I don’t know when this will be the case.

@Michshakee Alright I can work with that xD Thanks again for your great work! Will this plugin work for 1.10 currently? Or is it not yet updated to API 5?

I will start updating ActionControl when a stable Sponge build for 1.10 is released.

[19:13:47] [Server thread/INFO] [io.github.hsyyid.essentialcmds]: [RodaMeo] executed command actioncontrol reload
[19:13:47] [Server thread/ERROR] [org.monospark.actioncontrol]: An error occured while loading a config file.
java.io.IOException: Invalid matcher: {'type': 'minecraft:ender_chest' | 'minecraft:ender_table' | 'minecraft:anvil' | 'minecraft:piston' | 'minecraft:sticky_piston' | 'minecraft:tnt' | 'minecraft:end_portal_frame' | 'minecraft:hopper' | 'minecraft:brewing_stand' | 'minecraft:dispenser' | 'minecraft:dropper' | 'minecraft:beacon' | 'minecraft:golden_apple' | 'pixelmon:item.Healer' | 'pixelmon:item.Ranch_Block' | 'pixelmon:item.Cloning_Machine' | 'pixelmon:item.MechanicalAnvil' | 'pixelmon:item.PC' | 'pixelmon:item.Trade_Machine' | 'pixelmon:item.itemFinder | 'pixelmon:item.Uno_Orb' | 'pixelmon:item.Dos_Orb' | 'pixelmon:item.Tres_Orb' | 'pixelmon:item.Rare_Candy' | 'pixelmon:item.Ever_Ston' | 'pixelmon:item.Lucky_Egg' | 'pixelmon:item.Macho_Brace' | 'pixelmon:item.MuscleBand' | 'pixelmon:item.Soothe_Bell' | 'pixelmon:item.Smoke_Ball' | 'pixelmon:item.WideLens' | 'pixelmon:item.Leftovers' | 'pixelmon:item.Shell_ball' | 'pixelmon:item.Call_Battery' | 'pixelmon:item.Metronome' | 'pixelmon:item.Metal_Coat' | 'pixelmon:item.Dubious_Disc' | 'pixelmon:item.Electirizer' | 'pixelmon:item.Magmarizer' | 'pixelmon:item.King's_Rock' | 'pixelmon:item.Protector' | 'pixelmon:item.UP-Grade' | 'pixelmon:item.Razor_Fang' | 'pixelmon:item.Dragon_Scale' | 'pixelmon:item.Life_Orb' | 'pixelmon:item.RazorClaw' | 'pixelmon:item.FocusSash' | 'pixelmon:item.FocusBand' | 'pixelmon:item.ScopeLens' | 'pixelmon:item.AirBalloon' | 'pixelmon:item.RockyHelmet'  | 'pixelmon:item.ShedShell' | 'pixelmon:item.DampRock' | 'pixelmon:item.HeatRock' | 'pixelmon:item.IcyRock' | 'pixelmon:item.SmoothRock' | 'pixelmon:item.Eviolite' | 'pixelmon:item.LightBall' | 'pixelmon:item.LuckyPunch' | 'pixelmon:item.MetalPower' | 'pixelmon:item.RedCard' | 'pixelmon:item.ExpertBelt' | 'pixelmon:item.LightClay' | 'pixelmon:item.StickyBarb' | 'pixelmon:item.BlackBelt' | 'pixelmon:item.BlackGlasses' | 'pixelmon:item.Charcoal' | 'pixelmon:item.HardStone' | 'pixelmon:item.MiracleSeed' | 'pixelmon:item.MysticWater' | 'pixelmon:item.NeverMeltIce' | 'pixelmon:item.PosisonBarb' | 'pixelmon:item.SharpBeak' | 'pixelmon:item.SilkScarf' | 'pixelmon:item.SilverPowder' | 'pixelmon:item.SoftSand' | 'pixelmon:item.SpellTag' | 'pixelmon:item.TwistedSpoon' | 'pixelmon:item.Magnet' | 'pixelmon:item.ToxicOrb' | 'pixelmon:item.FlameOrb' | 'pixelmon:item.destinyKnot' | 'pixelmon:item.BlackSludge' | 'pixelmon:FirestoneSword' | 'pixelmon:FirestoneHammer' | 'pixelmon:FirestoneAxe' | 'pixelmon:FirestoneHoe' | 'pixelmon:FirestonePickaxe' | 'pixelmon:FirestoneShovel' | 'pixelmon:WaterstoneSword' | 'pixelmon:WaterstoneHammer' | 'pixelmon:WaterstoneAxe' | 'pixelmon:WaterstoneHoe' | 'pixelmon:WaterstonePickaxe' | 'pixelmon:WaterstoneShovel' | 'pixelmon:LeafstoneSword' | 'pixelmon:LeafstoneHammer' | 'pixelmon:LeafstoneAxe' | 'pixelmon:LeafstonePickaxe' | 'pixelmon:LeafstoneHoe' | 'pixelmon:LeafstoneShovel' | 'pixelmon:ThunderstoneSword' | 'pixelmon:ThunderstoneHammer' | 'pixelmon:ThunderstoneAxe' | 'pixelmon:ThunderstoneHoe' | 'pixelmon:ThunderstonePickaxe' | 'pixelmon:ThunderstoneShovel' | 'pixelmon:SunstoneSword' | 'pixelmon:SunstoneHammer' | 'pixelmon:SunstoneAxe' | 'pixelmon:SunstoneHoe' | 'pixelmon:SunstonePickaxe' | 'pixelmon:SunstoneShovel' | 'pixelmon:MoonstoneSword' | 'pixelmon:MoonstoneHammer' | 'pixelmon:MoonstoneAxe' | 'pixelmon:MoonstoneHoe' | 'pixelmon:MoonstonePickaxe' | 'pixelmon:MoonstoneShovel' | 'pixelmon:DrawnstoneSword' | 'pixelmon:DrawnstoneHammer' | 'pixelmon:DrawnstoneAxe' | 'pixelmon:DrawnstoneHoe' | 'pixelmon:DrawnstonePickaxe' | 'pixelmon:DrawnstoneShovel' | 'pixelmon:DuskstoneSword' | 'pixelmon:DuskstoneHammer' | 'pixelmon:DuskstoneAxe' | 'pixelmon:DuskstoneHoe' | 'pixelmon:DuskstonePickaxe' | 'pixelmon:DuskstoneShovel'}
        at org.monospark.actioncontrol.rule.ActionSettings$Deserializer.deserializeFilter(ActionSettings.java:178) ~[ActionSettings$Deserializer.class:?]
        at org.monospark.actioncontrol.rule.ActionSettings$Deserializer.deserializeFilters(ActionSettings.java:131) ~[ActionSettings$Deserializer.class:?]
        at org.monospark.actioncontrol.rule.ActionSettings$Deserializer.deserialize(ActionSettings.java:89) ~[ActionSettings$Deserializer.class:?]
        at org.monospark.actioncontrol.rule.ActionRule.deserializeSettings(ActionRule.java:102) ~[ActionRule.class:?]
        at org.monospark.actioncontrol.config.ConfigParser.deserializeActionRules(ConfigParser.java:115) ~[ConfigParser.class:?]
        at org.monospark.actioncontrol.config.ConfigParser.deserializeConfig(ConfigParser.java:98) ~[ConfigParser.class:?]
        at org.monospark.actioncontrol.config.ConfigParser.parseConfig(ConfigParser.java:69) ~[ConfigParser.class:?]
        at org.monospark.actioncontrol.config.ConfigParser.loadConfigs(ConfigParser.java:44) ~[ConfigParser.class:?]
        at org.monospark.actioncontrol.config.ConfigRegistry.loadConfigs(ConfigRegistry.java:23) ~[ConfigRegistry.class:?]
        at org.monospark.actioncontrol.ActionControl.loadConfigs(ActionControl.java:97) [ActionControl.class:?]
        at org.monospark.actioncontrol.ActionControl.access$000(ActionControl.java:32) [ActionControl.class:?]
        at org.monospark.actioncontrol.ActionControl$1.execute(ActionControl.java:74) [ActionControl$1.class:?]
        at org.spongepowered.api.command.args.ChildCommandElementExecutor.execute(ChildCommandElementExecutor.java:177) [ChildCommandElementExecutor.class:1.8.9-1890-4.2.0-BETA-1490]
        at org.spongepowered.api.command.spec.CommandSpec.process(CommandSpec.java:331) [CommandSpec.class:1.8.9-1890-4.2.0-BETA-1490]
        at org.spongepowered.api.command.dispatcher.SimpleDispatcher.process(SimpleDispatcher.java:331) [SimpleDispatcher.class:1.8.9-1890-4.2.0-BETA-1490]
        at org.spongepowered.common.command.SpongeCommandManager.process(SpongeCommandManager.java:269) [SpongeCommandManager.class:1.8.9-1890-4.2.0-BETA-1490]
        at net.minecraft.command.ServerCommandManager.func_71556_a(SourceFile:80) [bd.class:?]
        at net.minecraft.network.NetHandlerPlayServer.func_147361_d(NetHandlerPlayServer.java:815) [lm.class:?]
        at net.minecraft.network.NetHandlerPlayServer.func_147354_a(NetHandlerPlayServer.java:794) [lm.class:?]
        at net.minecraft.network.play.client.C01PacketChatMessage.func_148833_a(SourceFile:37) [ie.class:?]
        at net.minecraft.network.play.client.C01PacketChatMessage.func_148833_a(SourceFile:9) [ie.class:?]
        at org.spongepowered.common.network.PacketUtil.onProcessPacket(PacketUtil.java:119) [PacketUtil.class:1.8.9-1890-4.2.0-BETA-1490]
        at net.minecraft.network.PacketThreadUtil$1.redirect$onProcessPacket$0(SourceFile:39) [fh$1.class:?]
        at net.minecraft.network.PacketThreadUtil$1.run(SourceFile:13) [fh$1.class:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_91]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_91]
        at net.minecraft.util.Util.func_181617_a(SourceFile:44) [g.class:?]
        at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:660) [MinecraftServer.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:344) [ko.class:?]
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:605) [MinecraftServer.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:481) [MinecraftServer.class:?]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_91]
Caused by: org.monospark.spongematchers.parser.SpongeMatcherParseException: Invalid input string: {'type': 'minecraft:ender_chest' | 'minecraft:ender_table' | 'minecraft:anvil' | 'minecraft:piston' | 'minecraft:sticky_piston' | 'minecraft:tnt' | 'minecraft:end_portal_frame' | 'minecraft:hopper' | 'minecraft:brewing_stand' | 'minecraft:dispenser' | 'minecraft:dropper' | 'minecraft:beacon' | 'minecraft:golden_apple' | 'pixelmon:item.Healer' | 'pixelmon:item.Ranch_Block' | 'pixelmon:item.Cloning_Machine' | 'pixelmon:item.MechanicalAnvil' | 'pixelmon:item.PC' | 'pixelmon:item.Trade_Machine' | 'pixelmon:item.itemFinder | 'pixelmon:item.Uno_Orb' | 'pixelmon:item.Dos_Orb' | 'pixelmon:item.Tres_Orb' | 'pixelmon:item.Rare_Candy' | 'pixelmon:item.Ever_Ston' | 'pixelmon:item.Lucky_Egg' | 'pixelmon:item.Macho_Brace' | 'pixelmon:item.MuscleBand' | 'pixelmon:item.Soothe_Bell' | 'pixelmon:item.Smoke_Ball' | 'pixelmon:item.WideLens' | 'pixelmon:item.Leftovers' | 'pixelmon:item.Shell_ball' | 'pixelmon:item.Call_Battery' | 'pixelmon:item.Metronome' | 'pixelmon:item.Metal_Coat' | 'pixelmon:item.Dubious_Disc' | 'pixelmon:item.Electirizer' | 'pixelmon:item.Magmarizer' | 'pixelmon:item.King's_Rock' | 'pixelmon:item.Protector' | 'pixelmon:item.UP-Grade' | 'pixelmon:item.Razor_Fang' | 'pixelmon:item.Dragon_Scale' | 'pixelmon:item.Life_Orb' | 'pixelmon:item.RazorClaw' | 'pixelmon:item.FocusSash' | 'pixelmon:item.FocusBand' | 'pixelmon:item.ScopeLens' | 'pixelmon:item.AirBalloon' | 'pixelmon:item.RockyHelmet'  | 'pixelmon:item.ShedShell' | 'pixelmon:item.DampRock' | 'pixelmon:item.HeatRock' | 'pixelmon:item.IcyRock' | 'pixelmon:item.SmoothRock' | 'pixelmon:item.Eviolite' | 'pixelmon:item.LightBall' | 'pixelmon:item.LuckyPunch' | 'pixelmon:item.MetalPower' | 'pixelmon:item.RedCard' | 'pixelmon:item.ExpertBelt' | 'pixelmon:item.LightClay' | 'pixelmon:item.StickyBarb' | 'pixelmon:item.BlackBelt' | 'pixelmon:item.BlackGlasses' | 'pixelmon:item.Charcoal' | 'pixelmon:item.HardStone' | 'pixelmon:item.MiracleSeed' | 'pixelmon:item.MysticWater' | 'pixelmon:item.NeverMeltIce' | 'pixelmon:item.PosisonBarb' | 'pixelmon:item.SharpBeak' | 'pixelmon:item.SilkScarf' | 'pixelmon:item.SilverPowder' | 'pixelmon:item.SoftSand' | 'pixelmon:item.SpellTag' | 'pixelmon:item.TwistedSpoon' | 'pixelmon:item.Magnet' | 'pixelmon:item.ToxicOrb' | 'pixelmon:item.FlameOrb' | 'pixelmon:item.destinyKnot' | 'pixelmon:item.BlackSludge' | 'pixelmon:FirestoneSword' | 'pixelmon:FirestoneHammer' | 'pixelmon:FirestoneAxe' | 'pixelmon:FirestoneHoe' | 'pixelmon:FirestonePickaxe' | 'pixelmon:FirestoneShovel' | 'pixelmon:WaterstoneSword' | 'pixelmon:WaterstoneHammer' | 'pixelmon:WaterstoneAxe' | 'pixelmon:WaterstoneHoe' | 'pixelmon:WaterstonePickaxe' | 'pixelmon:WaterstoneShovel' | 'pixelmon:LeafstoneSword' | 'pixelmon:LeafstoneHammer' | 'pixelmon:LeafstoneAxe' | 'pixelmon:LeafstonePickaxe' | 'pixelmon:LeafstoneHoe' | 'pixelmon:LeafstoneShovel' | 'pixelmon:ThunderstoneSword' | 'pixelmon:ThunderstoneHammer' | 'pixelmon:ThunderstoneAxe' | 'pixelmon:ThunderstoneHoe' | 'pixelmon:ThunderstonePickaxe' | 'pixelmon:ThunderstoneShovel' | 'pixelmon:SunstoneSword' | 'pixelmon:SunstoneHammer' | 'pixelmon:SunstoneAxe' | 'pixelmon:SunstoneHoe' | 'pixelmon:SunstonePickaxe' | 'pixelmon:SunstoneShovel' | 'pixelmon:MoonstoneSword' | 'pixelmon:MoonstoneHammer' | 'pixelmon:MoonstoneAxe' | 'pixelmon:MoonstoneHoe' | 'pixelmon:MoonstonePickaxe' | 'pixelmon:MoonstoneShovel' | 'pixelmon:DrawnstoneSword' | 'pixelmon:DrawnstoneHammer' | 'pixelmon:DrawnstoneAxe' | 'pixelmon:DrawnstoneHoe' | 'pixelmon:DrawnstonePickaxe' | 'pixelmon:DrawnstoneShovel' | 'pixelmon:DuskstoneSword' | 'pixelmon:DuskstoneHammer' | 'pixelmon:DuskstoneAxe' | 'pixelmon:DuskstoneHoe' | 'pixelmon:DuskstonePickaxe' | 'pixelmon:DuskstoneShovel'}
        at org.monospark.spongematchers.parser.element.StringElementContext.getFinalElement(StringElementContext.java:26) ~[StringElementContext.class:?]
        at org.monospark.spongematchers.parser.element.StringElementParser.parseStringElement(StringElementParser.java:59) ~[StringElementParser.class:?]
        at org.monospark.actioncontrol.rule.ActionSettings$Deserializer.deserializeFilter(ActionSettings.java:174) ~[ActionSettings$Deserializer.class:?]
        ... 31 more
[19:13:47] [Server thread/INFO] [org.monospark.actioncontrol]: Fix the config and reload the plugin or restart the server to make it work again.

What should I do ? :>