BentoBoxWorld / Limits

Limits blocks and entities on islands - for BentoBox
Eclipse Public License 2.0
8 stars 17 forks source link

Add compatibility with Itemsadder//Oraxen #176

Open Olthoo opened 1 year ago

Olthoo commented 1 year ago

Is your feature request related to a problem?

no

Describe the solution you'd like.

I'd like to be able to limit the quantity of some custom blocks as well as vanilla one

In my case i'm using Itemsadder but some people might want oraxen compatibility

Describe alternatives you've considered.

N/A

Agreements

Other

https://itemsadder.devs.beer/developers/java-api

https://docs.oraxen.com/developers/api

tastybento commented 1 year ago

I just did a quick try. I haven't tested it yet because to install ItemsAdder requires a lot of setup. You can give it a go (on a test server!) if you like. Here's the jar: Limits-1.19.1-SNAPSHOT-LOCAL.jar.zip

Olthoo commented 1 year ago

Wow that was fast! I'm gonna give it a try right now !

If you need help with the setup it can be done really quickly just ping me on the discord 😄

tastybento commented 1 year ago

Okay, I'm in the middle of something right now, but I plan to test this weekend. I have not tested it at all yet (!) so I'll be very surprised if it works, but maybe! Share the error if it bugs out.

Olthoo commented 1 year ago

how shoud I define a limit of an ia block in the config ?

# Game Modes covered by limits
gamemodes:
- BSkyBlock

# Ignore this island's center block. For most worlds, this is bedrock, but for AOneBlock it is
# the magic block, so ignoring it from limits makes sense.
ignore-center-block: false

# Permissions
# Island owners can be given permissions that override all general settings
# Format is GAME-MODE-NAME.island.limit.MATERIAL.LIMIT
# example: bskyblock.island.limit.hopper.10 
# permission activates when player logs in.
#
# Cooldown for player recount command in seconds
cooldown: 120

# Use async checks for snowmen and iron golums. Set to false if you see problems.
async-golums: true

# General block limiting
# Use this section to limit how many blocks can be added to an island.
# 0 means the item will be blocked from placement completely.
# These limits apply to every game mode world
blocklimits:
  HOPPER: 10
  customcrops:pot: 5
# This section is for world-specific limits and overrides the general limit
# Specify each world you want to limit individually (including nether and end worlds)
# If these worlds are not covered by the game modes above, nothing will happen
worlds:
  bskyblock_world:
#    HOPPER: 11

# Default entity limits within a player's island space (protected area and to island limit).
# A limit of 5 will allow up to 5 entities in over world, 5 in nether and 5 in the end.
# Affects all types of creature spawning. Also includes entities like MINECARTS.
# Note: Only the first 49 limited blocks and entities are shown in the limits GUI.
entitylimits:
tastybento commented 1 year ago

Have a look here: https://github.com/BentoBoxWorld/Limits/blob/ff813e3e539b94cb0e7785e31ba54b595402a767/src/main/resources/config.yml#L30

tastybento commented 1 year ago

So, uncommented:

customblocklimits:
  "iafestivities:christmas/christmas_tree/green_orb": 5
Olthoo commented 1 year ago

thanks, it doesn't work for now , here is the error when placing a limited block


[21:57:11] [Server thread/INFO]: Olthoo issued server command: /tp Noxa2408
[21:57:23] [Server thread/ERROR]: Could not pass event kT to BentoBox v1.22.1-SNAPSHOT-b2377
java.lang.NullPointerException: Cannot invoke "java.util.Map.containsKey(Object)" because "this.customBlockLimits" is null
    at world.bentobox.limits.objects.IslandBlockCount.isCustomBlockLimited(IslandBlockCount.java:204) ~[Limits.jar:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.checkCustomLimit(BlockLimitsListener.java:497) ~[Limits.jar:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.lambda$process$3(BlockLimitsListener.java:396) ~[Limits.jar:?]
    at java.util.Optional.map(Optional.java:260) ~[?:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.process(BlockLimitsListener.java:377) ~[Limits.jar:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.onBlock(BlockLimitsListener.java:185) ~[Limits.jar:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor1050.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1933]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:617) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at ia.m.jK.a(SourceFile:423) ~[ItemsAdder.jar:?]
    at ia.m.cD.a(SourceFile:341) ~[ItemsAdder.jar:?]
    at ia.m.cD.i(SourceFile:159) ~[ItemsAdder.jar:?]
    at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:40) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1933]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:617) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:546) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.level.ServerPlayerGameMode.useItemOn(ServerPlayerGameMode.java:530) ~[?:?]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleUseItemOn(ServerGamePacketListenerImpl.java:2040) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.handle(ServerboundUseItemOnPacket.java:37) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.a(ServerboundUseItemOnPacket.java:9) ~[?:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:51) ~[?:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1368) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1345) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1338) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
    at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1316) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1204) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:321) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]
[21:57:24] [Server thread/ERROR]: Could not pass event kT to BentoBox v1.22.1-SNAPSHOT-b2377
java.lang.NullPointerException: Cannot invoke "java.util.Map.containsKey(Object)" because "this.customBlockLimits" is null
    at world.bentobox.limits.objects.IslandBlockCount.isCustomBlockLimited(IslandBlockCount.java:204) ~[Limits.jar:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.checkCustomLimit(BlockLimitsListener.java:497) ~[Limits.jar:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.lambda$process$3(BlockLimitsListener.java:396) ~[Limits.jar:?]
    at java.util.Optional.map(Optional.java:260) ~[?:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.process(BlockLimitsListener.java:377) ~[Limits.jar:?]
    at world.bentobox.limits.listeners.BlockLimitsListener.onBlock(BlockLimitsListener.java:185) ~[Limits.jar:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor1050.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1933]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:617) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at ia.m.jK.a(SourceFile:423) ~[ItemsAdder.jar:?]
    at ia.m.cD.a(SourceFile:341) ~[ItemsAdder.jar:?]
    at ia.m.cD.i(SourceFile:159) ~[ItemsAdder.jar:?]
    at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:40) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:git-Purpur-1933]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:617) ~[purpur-api-1.19.3-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.craftbukkit.v1_19_R2.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:546) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.level.ServerPlayerGameMode.useItemOn(ServerPlayerGameMode.java:530) ~[?:?]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleUseItemOn(ServerGamePacketListenerImpl.java:2040) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.handle(ServerboundUseItemOnPacket.java:37) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.a(ServerboundUseItemOnPacket.java:9) ~[?:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:51) ~[?:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:153) ~[?:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:24) ~[?:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1368) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:197) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:126) ~[?:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1345) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1338) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:136) ~[?:?]
    at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1316) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1204) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:321) ~[purpur-1.19.3.jar:git-Purpur-1933]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]```
Olthoo commented 1 year ago

full logs https://mclo.gs/1O23KnE

tastybento commented 1 year ago

Limits-1.19.1-SNAPSHOT-LOCAL.jar.zip Pretty sure that's due to backward compatibility issues with your current database files that don't track the custom blocks so they are null. This should fix that.

Olthoo commented 1 year ago

now I get the message in chat but i'm still not limited I don't get any error in the console

image

tastybento commented 1 year ago

So, just to clarify, when you place the block, you get a limit alert (I can see above) but you can still place the block?

Olthoo commented 1 year ago

exactly

Olthoo commented 1 year ago

any news on this request ? 😄

tastybento commented 1 year ago

Limits-1.19.1-SNAPSHOT-LOCAL.jar.zip I have changed the priority of the event listeners to try and run first before the other plugin has a chance to react to the block placing. I suspect that they are placing the block and then I am canceling the event after that. Clearly, the limiting logic is correct because you are getting the alert. Try the attached and see if that works. If it doesn't then the issue is that the other plugin is not respecting the cancelation. Let's see...

Olthoo commented 1 year ago

Thanks for your answer, I get the same result with this version. The chat warning seems to only trigger once every 4-5 blocks placed when the player spam it The limit is still not preventing the player placing blocks

Olthoo commented 9 months ago

Hi any news on this subject ?