Git Product home page Git Product logo

thermos's People

Contributors

chrislane avatar dogboy21 avatar downslope7 avatar gamerforea avatar robotia avatar sameer avatar skmedix avatar spannerman79 avatar time6628 avatar tyler2k15 avatar vizv avatar yive avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

thermos's Issues

[Investigation] Figure out why block-lag happens

When a server is lagging and a player breaks a block, sometimes it reverts back and is as though the player never broke the block.
This should be easily fixable by creating some kind of queue of block breaks. I will look into why this happens and see what, if anything, can be done about it.

[Bugs] Serious Issues with both unofficial and official builds

The version of KCauldron @spannerman79 forked from the prok.pw gitlab does not include many of the fixes which @Prototik made after July 25th.
Whatever changes were not included have prevented this unofficial build from unloading tile-entities properly:

  • TEs get stuck in a seemingly infinite loop...calling their unload methods until the server stops
  • Some TEs are never actually unloaded
  • TEs to be unloaded seem to be duplicated. There were over 4,000,000 tile entities to be unloaded on my server and that did not end well.
  • The server gets stuck and "times out" on removing this large amount of TEs from the list of TEs to remove.

After dealing with these problems for almost a week now, I have reverted to @Prototik's October 25th build. However this has also introduced its own host of issues:

  • Water does not move quite properly as noted in gitlab issue 222 (here)
  • Excessive amount of time spent in evaluating net.minecraft.world.WorldServer.getPendingBlockUpdates() for saving next-tick data to NBT for unloading chunks in AnvilChunkLoader

At this point I am just hoping that @Prototik will continue his builds in January as is noted on the gitlab.

Last KCauldron version error

I start my server and all works fine, but in some moment this message flood all the console:

[KC-Unofficial] Already Decorating a Chunk! Waiting...

This is the complete log (Pt-BR server):
fml-server-3.log.txt

(With BetterShops error too)

Suggestion: Auto Flat Bedrock gen

Is it possible to add a feature to the world gen where it auto gen's bedrock as 1 layer?
Perhaps have a configurable option to use classic bedrock gen or new bedrock 1 layer gen.
Saves on requiring a mod to do this.

Looking through the paper spigot code. Seems they already implented this.
Appologies if this has already been implemented into KC

PaperMC/Paper-1.7@11556b4

[problem] - Kcauldron[v.7] - No entity

Related to the Forge <--> Bukkit Explosion prime events.

There is no Entity parsed with the event which makes Worldguard throw exceptions in the screen.

Tests:
Industrial TNT: No event
Tiny TNT: No events
Nether ore: Event without entity

Event-linking to-do list (please add on)

The following need to be linked from Forge to Bukkit (so Forge Items code isn't called if Bukkit stops the event early):

  • PlayerInteractEvent
  • PlayerEvent.HarvestCheck
  • PlayerEvent.BreakSpeed
  • PlayerUseItemEvent.Start
  • PlayerUseItemEvent.Tick
  • PlayerUseItemEvent.Finish

ForgeRestrictor vs KC's new protection?

I was just wondering with KCauldrons new ability to protect region protected areas from all items is there any valid reason to use ForgeRestrictor Plugin?

Regaridng the build process

I have a question regarding the build process.

  • What is the difference between the [name].jar and [name]-server.jar?
  • The libraries there are required for it to run are the bin folder in bunde (which I have to put in the same folder and rename to libraries) - yes?

as far as i can see they are pretty close to each other in general (size wise)

[Proposal] Chunk-Caching for SillyProblems

TL; DR Some extremely fast operations (i.e. Redstone Repeater timers) cause unnecessary lag by fetching chunks from the hasmap. The server should cache the last few accessed chunks. I'm open to any ideas for how this collection could be organized.

I have managed to reduce the bottleneck of chunk-getting from the hashmap through implementing #10. However, I have found that frequent, fast access by mods (and sometimes even vanilla features) makes this bottleneck an even bigger problem. See the examples below (or skip ahead):

  1. A player sets off a bunch of massive explosions. The entire server lags as a result. The source lies in the fact that setBlock() to air requires the server to fetch the loaded chunk from the hashmap every time a block is set.
  2. A player creates an extremely fast timer with a few redstone repeaters. Again, the server lags. The source, once again, lies in the fact that setBlock() to redstone powered/unpowered repeater fetches the loaded chunk every time.
  3. A player sets a forest on fire. The fire spread call to surrounding tiles and setting surrounding blocks on fire also fetches the loaded chunk every time.

These problems make no sense to me and they have probably been around forever.

I propose that KCauldron implement a sort of chunk-caching feature for the most accessed chunks. A GC flag (similar to the one applied in #8) could be used to prevent cached chunks from being inadvertently accessed when unloaded. An array could be implemented, but the cache-size would limit the speed of operations on chunks outside of the cache. Maybe a small hashmap inside methods that caches chunk calls and clears every 50ms?

This may take some time to implement but will definitely be worthwhile.

List of PaperSpigot patches.

Hey there, I'm going to list all the PaperSpigot patches I find in here until I can find out how to submit PRs, once I find out how, I'll start PRing.


Not entirely sure, but from reading this commit, it seems this may fix the "Player moved wrongly" spam I get in console on a frequent basis.

Fix broken movement caused by mutated location in PlayerMoveEvent.
http://pastebin.com/rCq8tWnt

Damn you move quickly.


Stops Spigots built in anti x-ray from queuing updates if you've disabled it.
http://pastebin.com/CYBUvwN8

[To Do] Grab changes from PaperSpigot and Implement Here

The creators of PaperSpigot have implemented many fixes that KCauldron does not have and desperately needs.
If anyone is willing to help, we need to start sorting through the .patch files from 1.7.10 here to find what fixes KCauldron does not have.
UPDATE: The following folders are relevant:

  • Bukkit-Patches
  • Spigot-Server-Patches
  • CraftBukkit-Patches

If you find a fix, please make a pull request. If you are not a Git User, this is easy to do. Just find the right file, there is an edit button where you can change the file and easily create a pull req.

Server not starting up, missing Joptsimple

Regular cauldron from https://gitlab.prok.pw/KCauldron works fine, but I want to use this one because of the TickNextTick issue. It won't start up for some reason:

Exception in thread "main" java.lang.NoClassDefFoundError: joptsimple/OptionSpec
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)

[Proposal] KC-Unofficial Metrics

I'd like to set up metrics to get an idea of how many servers use these builds. If I hear no objections, I will start looking into how to set this up.

[WIP] Wrapping Class compatible with Mods for NextTickList Updates

PaperSpigot-1.7 has long since fixed the out of synch error (see here).

The problem is, we cannot use this exact fix because mods like RemainInMotion try to keep the two sets synchronized by accessing both collections. Remove one collection and these mods will start throwing errors.

To fix this, we must:

  • Adapt the patch to implement HashSet<V> instead of Set<V>
    • Then replace nextPendingTickEntriesHashSet (or whatever it's called) in WorldServer.java
  • Wrap the TreeSet collection with a fake class that refers to the adapted HashSet collection so that contains.. and size still work, but changes will be ignored.

[Warning] NPCs are still broken

Warning to all server owners using KCauldron, NPCs are still somewhat broken.

If you have an NPC with the same name as one of your players, remove it now.

A player in survival mode can do a creative "middle-click" to get free items if there is an NPC that has the same name.

This should have been fixed by Protik here but it is not.

[Warning] Don't use ANY tick limiting

TickProfiler is the bane of KCauldron's existence, and as noted by #51 , causes problems. It gives useless results because KCauldron lowers the tickrate for stuff when players are far away

@spannerman79 has brought to my attention the fact that Spigot's tick limiter is the bane of just about every mod's existence.

Alternatives Include:

  • Get Bukkit's ClearLag and occasionally run /lagg killmobs to get rid of mobs
  • Edit settings in tileentities.yml
  • Optimize your mob spawning settings in spigot.yml and bukkit.yml
  • Get a real profiler: VisualVM, YourKit, and WarmRoast are great choices

Remove "Moved To Quickly!"

I can no longer move due to this. According to some old bukkit threads this was added to prevent fly and speed hacks without Nocheat plugins. I am currently standing still and this is spamming my console:

16:24:53 [Server] INFO [16:24:53 WARN]: TimeTheCat moved too quickly! 0.0,0.0,0.0 (0.7362446254261049, 17.287364536482865, 0.8210849952264293)
16:24:53 [Server] INFO [16:24:53 WARN]: TimeTheCat moved too quickly! 0.0,0.0,0.0 (0.8090600046238042, 17.720167551044256, 0.90229117754165)
16:24:53 [Server] INFO [16:24:53 WARN]: TimeTheCat moved too quickly! 0.0,0.0,0.0 (0.8890769025349831, 18.161803271593087, 0.9915287379535977)
16:24:53 [Server] INFO [16:24:53 WARN]: TimeTheCat moved too quickly! 0.0,0.0,0.0 (0.9770075570460881, 18.61245195725981, 1.0895919883273744)
16:24:53 [Server] INFO [16:24:53 WARN]: TimeTheCat moved too quickly! 0.0,0.0,0.0 (6.162770979767413, 19.08425378642975, 1.9269531527595067)

The server is at 20 tps and my ping is 32ms. Also, I do not have anything that changes my speed.

Inventory Wipe on Death and Dimension Switch.

When I upgraded to build 13 of (K)Cauldron, while you have keepInventory set to true in any world, if you switch from a dimension with keepInventory on to a dimension without it on, it causes the players inventory to be wiped.

Now while there is an easy fix by turning off keepInventory, just thought I'd report the issue.

Thank you Robotia, keep up the awesome work! Performance and stability keeps improving!

[Proposal] Transition away from LongHashMap to Java ConcurrentHashMap

Currently, KCauldron uses a gnu trove LongHashMap to store loaded chunks.

I have noticed that mods that frequently request getTileEntity() or chunkExists() or other such similar methods reach a bottleneck because of the inherent slowness of this hash map.

I propose transitioning away from a Long-based hashmap towards an integer based Java ConcurrentHashMap.

Yes, I know there is a possibility of collision in hashing. I have taken this into account as this following segment of code shows:

public static int chunk_hash(int x, int y)
{
    return ((x & 0xFFFF) << 16) | (y & 0xFFFF);
}

This hash elegantly fits the chunks into two 16 bit integers. This does introduce a limit: chunks beyond the 16-bit range [โ€“32768,32767] will collide with other chunks in the map. However, most servers implement a world border or other feature to prevent players from ever traversing so far (consider the fact that this is over 500,000 blocks away from (0,0) ). As a preventative measure, chunks beyond these limits could simply not be loaded and players could be forced back from the "edge of the world" (as would be the case for chunks beyond the integer range in the LongHashMap).

I implemented this last night in KCauldron and have had a volume of 27 players today with no noticeable errors (except that I forgot to transition a few code segments away from long towards int).

If @Yive gives me the go-ahead and I receive no objections in the next week, I will start working on it here.

Thank you.

After testing your version of KCauldron performance did increase a lot.

On startup with Prototiks version, the ms/t would be 6-8ms.

On startup with your version, the ms/t is 2-4ms/t.


Sorry if this seems like a waste of time, just wanted to thank you for the time you spent working on this. Especially given the fact that you didn't have to share this with anyone at all.

Entities without players nearby, but chunk loaded

KCauldron appears to have an interesting behavior with chunk loading, entities, and not having a player nearby.
What I've found is that chunk loading works fine for tile entities (when skip tile entities is false). Machines continue to work, etc.
But if I set up a chicken spawner, I see from logs that the chickens are spawning, but once they've spawned they do not move. Teleporting back to the location shows them all clumped together for a moment before they begin to float down and die from some spikes.
Items appear to behave similarly to monsters. If I set up a dispenser to drop something, the item doesn't move until I return to the chunk. These items do appear to get cleaned up from the item timeout though.

I've tried changing the entity activation range to 0 but it had no effect.

The mod list I have is fairly minimal: thermal expansion/dynamics for testing to see if the items would get picked up from a distance. Extra utilities for picking up the items. OpenBlocks for trying to move monsters with fans. Then NEI, journeymap, and I've tried both FTB Utilities for chunk loading and serversidechunkloader, both acting the same.

Is this expected behavior, or is there a setting I have not found yet?

[Proposal] JNI / JNA Integration

I am thinking of changing some methods to be native C/C++ based for performance.

For instance, on startup, KCauldron could load mods much faster with native reading/writing.

This could be done in two ways:
Java Native Interface (JNI):

  • Requires manual, difficult coding (java header files, which are beyond my basic knowledge of C/C++)
  • Very system dependent
  • Crash logs will be more difficult to understand
  • Probably the faster of the two

Java Native Access (JNA):

  • Tried and tested, lots of Q&A support
  • Not as easily customizable

Projectile not firing

Having a issue with projectiles not firing unless the target is a block. If you try to fire with no block present it will not shoot.

Happening with mods

Tinker's Construct
DivineRPG

Offical KCauldron has this issue aswell.

Bees lose data when dropped.

When a forestry bee is dropped on version KCauldron-1.7.10-1614.175.3-TCPR-UNOFFICIAL they lose all data and become plain bees with no attributes. This does not happen with vanilla forge.

Soulbound

I hate to be the person to bring this up, as I have brought it up several times on both Ars Magica and Kcauldron issue trackers. Last time I posted it Ars magica dev told me kcauldron needed to fix it, and kcauldron dev told me ars magica dev needed to fix it :/. What I think is going on is the event fired onPlayerDeath (where soulbound items get stored) and onPlayerRespawn (where stored items get placed back into players inventory) get modified in some way due to kcauldron. Look here for the event tracker class of Ars magica, it contains the code for both onPlayerDeath and onPlayerRespawn, this issue has been around since I started using cauldron back when it first got DMCA'd and would really love to see it fixed finally. I did notice some code for dimension change, and noticed there was a 40 (either in ticks or milliseconds, not sure) delay for syncing the stored data. It should also be noted that soulbound does in fact work in the overworld, but in any other dim it does not work, so maybe there is something altering how player dimension changes are handled. Through my testing EnderIO soulbound enchant works just fine, so it might be worth looking at this From what I can tell if ars magica were to change their onPlayerDeath(EntityPlayer player) to onPlayerDeath(PlayerDropsEvent evt) it would work, I tried doing this manually but soon found it would require changing nearly the entire code for Ars magica soulbound to work with that. Greatly appreciate you working so hard on KCauldron, hopefully it can become mainstream someday.

Makepatch.sh Broken

makepatch.sh is broken. Problems listed below:

  • diff --git line shows at the top of the file
  • index ... shows at the top of the file
  • some @@ .... @@ lines end with a code line that should've been on the next line
  • Sometimes \ No newline at end of file shows up at EOF
  • The --- and +++ lines at the top show a/eclipse/Clean/src/main/java and b/eclipse/cauldron/src/main/java instead of src-base/minecraft and src-work/minecraft

UPDATE: All issues above fixed by commit 9f3c83b

New issues:

  • makepatch.sh mistakes World.java in net/minecraft for org/bukkit
  • makepatch.sh doesn't echo all diff info like it should...

UPDATE: All issues above fixed by commit c36c075

New issues (Jan 24)

  • makepatch.sh doesn't make patches for files that don't already have patches

[Proposal] Stop Vanilla Blocks from Unnecessary Chunk Loading

I have found that vanilla blocks like BlockGrass.java and BlockStaticLiquid.java load chunks when getting/setting blocks.

I propose that chunkExists() be implemented in several of these to prevent the server from being silly and updating blocks by loading chunks....

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.