Git Product home page Git Product logo

exilepearl's People

Contributors

aleksey-terzi avatar caucow avatar diet-cola avatar jaymsdooku avatar kalohg avatar lazersmoke avatar maxopoly avatar mrlittlekitty avatar okx-code avatar programmerdan avatar protonull avatar squareblob avatar tealnerd avatar therealarchie avatar wingzero54 avatar xfier avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

exilepearl's Issues

Upgraded players don't immediately get sent to the end

Heard a report that after upgrading someone they stuck around in the overworld. It took killing them again to send them to the end.
This may be a concern if exile restrictions get removed for prisoners still in the overworld.

New storage blocks aren't specifically named when using /ppl

A pearl was stored in a barrel and returned https://i.imgur.com/A9JBnUR.png rather than a name like it does for other blocks.

If you wanted a quick and easy solution, adding them to wherever the list already exists should be sufficient. But a potentially more entertaining solution could be to look up the actual name of the block, so things like wordbanked chests actually showed their name via /ppl, if that's at all possible. It would help make another place that wordbank could be visible to help encourage more wordbank usage as well as perhaps provide some entertainment for the involved players.

A huge range of ways to kill people are not prevented by "rules.pvp" or the mob/animal harming rules

Ways of killing that are NOT prevented by rules.pvp are listed below. these are all bugs, since the config instructions claim "When false, exiled players can't harm other players":

  • pour water on (does NOT even require hoppers, you can use ice instead) and drown, or use nearby water
  • pour lava on (hopper) and burn, or use nearby lava
  • drop anvil on them
  • drop sand and suffocate
  • place cacti and push them into it
  • place magma blocks and push them into it
  • set fire with a fire charge and burn them (no hoppers needed, but can also set fire that way)
  • Place any of a wide variety of mob eggs so the mobs kill them
  • Setting off a firework next to them, takes like 4 fireworks.
  • Digging ground out from under them into a pit for fall damage
  • Break bedrock and push them into the void
  • Setting off various explosions, end crystals (not blocked), tnt carts (not blocked), TNT (requires obvious exploit with hopper), the bed in the end
  • PROBABLY wither spawning, but it is disabled by a different plugin on the server I was testing, so not 100% sure.

Ways of killing that ARE prevented:

  • Punching / bows
  • Potions
  • Dogs
  • Thorns armor

Log On error

Players get immediately kicked and banned when they try to log on.

End spawning issue

Still repeatedly spawning at x0, y0, z0, causing the player to fall into the void in an infinite death cycle

Could not pass InventoryClickEvent to ExilePearl

[14:52:36] [Server thread/ERROR]: Could not pass event InventoryClickEvent to ExilePearl v1.4.1
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 36
at java.util.Arrays$ArrayList.get(Arrays.java:4351) ~[?:?]
at net.minecraft.server.v1_16_R3.NonNullList.get(SourceFile:46) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.PlayerInventory.getItem(PlayerInventory.java:541) ~[patched_1.16.4.jar:git-Paper-355]
at org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventory.getItem(CraftInventory.java:49) ~[patched_1.16.4.jar:git-Paper-355]
at com.devotedmc.ExilePearl.listener.PlayerListener.onInventoryClick(PlayerListener.java:551) ~[?:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor335.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.4.jar:git-Paper-355]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[patched_1.16.4.jar:git-Paper-355]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.4.jar:git-Paper-355]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.PlayerConnection.a(PlayerConnection.java:2540) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:32) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.PacketPlayInWindowClick.a(SourceFile:10) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.TickTask.run(SourceFile:18) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.MinecraftServer.bb(MinecraftServer.java:1133) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.MinecraftServer.executeNext(MinecraftServer.java:1126) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:119) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.MinecraftServer.sleepForTick(MinecraftServer.java:1087) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1001) ~[patched_1.16.4.jar:git-Paper-355]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:178) ~[patched_1.16.4.jar:git-Paper-355]
at java.lang.Thread.run(Thread.java:834) [?:?]

Add login streaks and daily mana rewards

We intend to deeply ingrain mana streaks into pearl health decay, so it only makes sense to add it as optional feature to this plugin. Probably also rename mana to essence, because mana was literally a meme name. Further allow scaling damage dealt to pearls with the imprisoned players streak.

Minor annoyances

  • Although clicking exile pearls into chest minecarts is prevented, exile pearls can still be moved into chest minecarts using hoppers. Not a big issue as the pearl will fail the next verification attempt and be freed. Fixed as hoppers will no longer move pearls
  • There is no error message displayed when clicking an exile pearl into a chest minecraft/donkey etc. is cancelled
  • Renaming exile pearls in an anvil is not cancelled and wastes XP as the new name is immediately reset on verification attempt.

Make pearl decay event per pearl

Current one is useless and unused, can just replace it with a per pearl decay event. The event should be cancellable and include a setter for the amount of damage dealt (needed for EssenceGlue).

In some situations, you need to type /ep locate to be freed

Unfortunately I can't seem to nail down exactly the pattern for when this happens in EP, but on the old PP, it used to happen reliably whenever somebody threw your pearl to release it. You would be stuck in the end, even through restarts and logins, until you did /pp locate. So that might lead to finding the problem. Or otherwise, see what code is called on /ep locate, and reconsider whether it should be called more often as well such as on login.

Exiles can still use potions

The potion is not consumed, but the effect is still given. Speculative fix is CivClassic/PvPTweaks#1, but it needs further testing to verify that a) that was the source of the problem and b) that was the only source of the problem.

Player skull lookup choking out server

Loading the Hjaltland vault froze the server for about 30 seconds due to it doing a lookup for the skin in sync.

[08:58:28 ERROR]:               com.mojang.authlib.HttpAuthenticationService.performGetRequest(HttpAuthenticationService.java:130)                                                                      [157/99027]
[08:58:28 ERROR]:               com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:85)                                                                    
[08:58:28 ERROR]:               com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillGameProfile(YggdrasilMinecraftSessionService.java:186)                                                           
[08:58:28 ERROR]:               com.destroystokyo.paper.profile.PaperMinecraftSessionService.fillGameProfile(PaperMinecraftSessionService.java:38)                                                                 
[08:58:28 ERROR]:               com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillProfileProperties(YggdrasilMinecraftSessionService.java:179)                                                     
[08:58:28 ERROR]:               com.destroystokyo.paper.profile.PaperMinecraftSessionService.fillProfileProperties(PaperMinecraftSessionService.java:31)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.TileEntitySkull$1.load(TileEntitySkull.java:80)                                     
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.TileEntitySkull$1.load(TileEntitySkull.java:47)                                                 
[08:58:28 ERROR]:               com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716)                               
[08:58:28 ERROR]:               com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424)                      
[08:58:28 ERROR]:               com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298)
[08:58:28 ERROR]:               com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211)                     
[08:58:28 ERROR]:               com.google.common.cache.LocalCache.get(LocalCache.java:4154)                                                
[08:58:28 ERROR]:               com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158)                             
[08:58:28 ERROR]:               com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147)
[08:58:28 ERROR]:               com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5153)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.TileEntitySkull$3.call(TileEntitySkull.java:221)       
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.TileEntitySkull$3.call(TileEntitySkull.java:218)         
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.TileEntitySkull.b(TileEntitySkull.java:237)              
[08:58:28 ERROR]:               org.bukkit.craftbukkit.v1_16_R1.inventory.CraftMetaSkull.applyToItem(CraftMetaSkull.java:95)
[08:58:28 ERROR]:               org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack.setItemMeta(CraftItemStack.java:535)
[08:58:28 ERROR]:               org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack.asNMSCopy(CraftItemStack.java:42)
[08:58:28 ERROR]:               org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventory.setItem(CraftInventory.java:99)    
[08:58:28 ERROR]:               com.devotedmc.ExilePearl.listener.PlayerListener.onInventoryOpen(PlayerListener.java:150)    
[08:58:28 ERROR]:               com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor295.execute(Unknown Source)
[08:58:28 ERROR]:               org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69)                  
[08:58:28 ERROR]:               org.bukkit.plugin.EventExecutor$$Lambda$3797/1480833275.execute(Unknown Source)                  
[08:58:28 ERROR]:               co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80)                               
[08:58:28 ERROR]:               org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)                                     
[08:58:28 ERROR]:               org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607)                                           
[08:58:28 ERROR]:               org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory.callInventoryOpenEvent(CraftEventFactory.java:1241)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.EntityPlayer.openContainer(EntityPlayer.java:1287)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.PlayerInteractManager.a(PlayerInteractManager.java:496)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.PlayerConnection.a(PlayerConnection.java:1451)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:27)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.PacketPlayInUseItem.a(PacketPlayInUseItem.java:5)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.PlayerConnectionUtils.lambda$ensureMainThread$1(PlayerConnectionUtils.java:23)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.PlayerConnectionUtils$$Lambda$4985/1380011687.run(Unknown Source)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.TickTask.run(SourceFile:18)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.IAsyncTaskHandler.executeTask(IAsyncTaskHandler.java:136)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.IAsyncTaskHandler.executeNext(IAsyncTaskHandler.java:109)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.MinecraftServer.aZ(MinecraftServer.java:1137)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.MinecraftServer.executeNext(MinecraftServer.java:1130)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.IAsyncTaskHandler.executeAll(IAsyncTaskHandler.java:95)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.MinecraftServer.a(MinecraftServer.java:1260)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.MinecraftServer.v(MinecraftServer.java:1001)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.MinecraftServer.lambda$a$0(MinecraftServer.java:177)
[08:58:28 ERROR]:               net.minecraft.server.v1_16_R1.MinecraftServer$$Lambda$2939/1145603405.run(Unknown Source)
[08:58:28 ERROR]:               java.lang.Thread.run(Thread.java:748)

Not sure how caching of skins works. If its persistent for the entire runtime, it'd be good enough to create a skull for them once on startup. If that's not the case and they're discarded every X minutes, then we likely need to revert the skull thing entirely

The majority of the restricted blocks and placement actions are possible anyway with workarounds

TNT / explosions:

  • You cannot place it directly, and you cannot put it into a dispenser by standard clicking.
  • You CAN however, place a hopper over a dispenser, drop TNT into it, and toggle the dispenser to activate TNT
  • You CAN also place TNT carts without any restrictions.
  • You CAN place end crystals which also explode.
  • You CAN place beds which explode in the end or nether
  • You can probably (haven't been able to test, but based on the above being possible) spawn a wither which may then proceed to blow up all sorts of things
  • You CAN place creeper eggs then stand near them causing explosions
  • You can set off and harm people etc. with fireworks explosions
  • Possibly others I haven't thought of
  • Note that this also gets around, indirectly, various other restrictions, for example you can use TNT to break reinforced chests

Water:

  • You cannot dump a bucket directly or click a bucket into a dispenser inventory
  • You CAN place ice and wait for it to melt into a source block
  • You CAN use a hopper to get a bucket into a dispenser then use it for water or lava, like above

Getting into bastions:

  • You can't get in if teleport is on, as far as I can tell
  • You CAN still get blocks and entities to go in, though. Like to launch shit like TNT into the bastion and still blow things up / kill people / etc. Or send in mobs, and so on.

Fire:

  • You can't click with a flint and steel (don't remember if dispenser flint and steel works)
  • You CAN once again use a hopper to get around the dispenser even if the dispenser does block (i did test that)
  • You CAN click with a fire charge without any restrictions (this is one of the most portable and easiest ways to kill players or mobs)
  • You CAN set fires with some various side effect methods like beds exploding which add fires. IIRC (haven't tested this one) TNT also generates fires for flammable blocks in radius (see above TNT workarounds)
  • On servers with fire spread, you CAN use a hopper to place lava and wait for it to light wood etc. on fire.

Feature Request: In game pearling explanation on first pearling

Is it possible to provide some in game means to notify the player what being pearled means, offer some common reasons that people are pearled by other players, and some ideas for how to resolve the issue? We could talk to the community for the exact wording, but it seems that a lot of new players who go raiding or something are VERY confused when they are first pearled for whatever reason, and perhaps a reminder on what pearling is the first time they're pearled may be helpful. Either via a different colored text explanation in chat, or some sort of ui, etc...

Thoughts?

Pearls don't affect the pearled unless they're in a tileentity. They should affect while held, too

  1. This is strictly a bug, since the instructions text on the config says "The radius around their pearl that an exiled player can't enter" which is definitely false as written.

  2. Even if rewritten, this is a feature we should have. yes, it may be annoying in some cases if a player is repeatedly teleported, but should be a feature anyway, because the plugin also allows for damage mode instead of teleporting, and it's pretty reasonable in that case. Even for teleporting, unless the pearler walks in exactly the direction of the victim, it shouldn't matter often.

Apologies if this is already a feature, but I looked through the config instructions and didn't see mention of it. Just "pearl_radius" alone

Fix failure to find safe spot

PearlBoundaryTask handles teleporting the exiled player around to attempt to find a safe spot to place them. This is used when an exiled player respawns in a bastion field (or if you move into a bastion field?). The issue is if the bed spawn is set inside a bastion field, you are permanently teleported around in a loop as it is unable to find a safe spot to put you. You also accrue damage inside a bastion field and will get respawned, stuck in a death/teleportation loop.

A fix would either be: a more aggressive pearl boundary task that attempts to move the player further and further away until it finds a safe spot to place the player, OR on failure to find a safe spot and if their spawn is within a hostile bastion field, randomspawn them (ideally not unsetting their spawn either).

People are not freed until they actually log on, even if should be free

For example, if I'm altbanned, and my pearled alt has their pearl destroyed, then I should be able to log on now on my other alts, but I can't. Not until that alt logs in, and the system goes "OH SHIT wait, you're free!" thus unlocking the altban.

You should ideally be able to log on as soon as that pearl is destroyed. Extra hoops are not just annoying but newer players might not realize they can even do that, and may just give up and leave.

Logging out with a pearl the server places it in a barrel???

I logged out holding a pearl, logged back in, and there was a barrel floating in the air with the pearl inside of it. Was this some new additional to ExilePearl I'm not aware of? Is it related to me being OP? Is this related to the reports of copies of pearls showing up in barrels around the world?

Exile restrictions based on bastion group

It would be a nice QOL improvement for exile restriction to be based on the bastion's groups. For instance, to be able to set it so that exiled players could place snitches and break reinforcements while inside a friendly bastion field.

Pearl decay is still laggy

[14:06:48 INFO]: [ExilePearl] Pearl decay completed in 636ms. Processed 337 and freed 0.

According to other logs only 1 or 2 pearls were actually processed, all other were skipped due to unloaded chunks. Initial few checks also warned

[14:06:48 WARN]: [com.zaxxer.hikari.pool.PoolBase] HikariPool-10 - Failed to validate connection com.mysql.jdbc.JDBC4Connection@2ffc5a8c (No operations allowed after connection closed.). Possibly consider using 
a shorter maxLifetime value.  

Mabye sync db queries (alt lookups etc.) are the issue? We could do all the actual calculation async and then apply only the changes sync?

Items deleted on /ep summon if end chunks are unloaded

Steps to repro:

  1. Summon a prison pearled player
  2. Give items
  3. Summon (Notice inventory will be clean)
  4. Return (On return, the items will be despawned if no-one is around.)

When a player is in the vicinity of the summoned player, the items will drop and the player will spawn correctly back on top of the items when returned, however if the summoned player is the only person loading the chunks they are in, the items will instantly despawn upon /ep summon

Exiled player able to walk into exile field. Upon being killed, game says pearl is held by another exiled player.

Concerning the attack on Pinkerton near -6372 1917 on 19 to 20 May 2018.

Capri has been pearled for several months, RasionRulings was pearled on the evening of the 19th.

RasionRulings's pearl was placed in a reinforced chest nearby. However, he was able to approach and enter the exclusion radius of the pearl. When killed, RasionRulings's death message said that the pearl was held by Capri. This can't possibly be true, since Capri is pearled, I saw him die repeatedly right in front of me, and I confirmed the location of the pearl.

After killing RasionRulings several times, I got the same message -- pearl being held by capri. We decided to upgrade the exile pearl to a prison pearl to prevent him from helping his compatriots.

I can provide specific game logs and specific coordinates upon request.

Pearl decay task is laggy

Pearl decay should not force load chunks with pearls, it makes pearl decay a major performance hiccup. When implementing this, keep in mind that calls like getLocation().getChunk().isLoaded() will force load the chunk.

Add logging and tracking for Mana

Needs:

  • Admin viewable transaction log (as a DB table, viewable with /manainspect)
  • Pearled player viewable "Who is supply the Mana to keep me pearled?"
  • Possibly player viewable self-transaction log (possibly viewable with /mns)

Feature request: /ep broadcast only works on groups, should also work for individuals

This is especially relevant on servers such as civclassic, where there's a low limit on how many namelayer groups you can create (10, there). So if I already created 10 groups, and am pearled, I just can't broadcast easily on my own. I need to go find some poor shmuck to borrow their group or make one for me, which is very awkward.

PrisonPearl already allowed individual broadcasting, so there should be a coded solution already available from that plugin.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.