Coder Social home page Coder Social logo

terminatornl / tiquality Goto Github PK

View Code? Open in Web Editor NEW
23.0 3.0 12.0 678 KB

Make server lag the problem of the source player.

Home Page: https://www.curseforge.com/minecraft/mc-mods/tiquality

License: GNU General Public License v3.0

Java 100.00%

tiquality's Introduction

Tiquality

Tiquality is the successor of the seemingly popular mod: LagGoggles.

At this moment, Tiquality is a server side only mod, but supports clients too (Lan hosted).

The core functionality is limiting a player's tick time in the world to evenly distribute time.

Support

If you have an issue, I'd rather have you submit a new issue report on GitHub. If you think it's not worthy of an issue report on GitHub, there's a discord channel where you can contact me in a more informal way. Please note, issues discussed on GitHub are better because other people can find the same problem, and tune in without digging through hundreds of text messages (More organized)

Download

You can download the latest release here. The ONLY difference between THIN and FAT is that FAT ships Mixin, which is a library that Tiquality needs in order to function. It's possible that another mod already ships Mixin or has another version. Generally speaking, Tiquality can handle most Mixin versions well. A known mod to ship Mixin is SpongeForge. If you have SpongeForge or another mod that requires a different version of Mixin, choose the THIN release.

Modpack authors

Yes, you have my permission! Please add this to your modpack! ๐Ÿ‘ It will save server admins a lot of time if you do all the configuration work for them! (/tq setblock)

Configuration

Interested in this mod? Check out the default and documented configuration here.

What this is, and what it is intended for

An update throttler, that aims to provide a fair Minecraft experience at 20 TPS for users who do not cause a heavy load on the server, whilst players who build carelessly only get 10 TPS (Their TPS gradually decreases as their impact increases).

This encourages server friendly build behavior, and attempts to not ruin gameplay for others who care about their server.

Generally speaking, players won't notice Tiquality's presence, and don't have to interact with it. On rare occasions, /tq claim can help them out instantly.

This isn't a punishment mod, but makes the culprit face the consequences of their actions on their own. This means that everyone else benefits.

What this is not

This is not something like ClearLagg. Tiquality tries to keep the game fair for everyone, regardless of what someone else is doing.

Behavior

Blocks without an owner which are not specified in the config cannot update. This includes freshly generated areas. To keep functionality like leaf decay and grass growth, you can whitelist blocks in the config. Whitelisted blocks do not need an owner in order to tick.

If a player places a block, Tiquality will assign that block to that player's personal tracker. This tracker will perform future updates for that block, using the time constraint of the player that placed the block.

If more players log in, the time will be divided more. If a player doesn't use up all of his tick time, other's will receive the remaining time.

Logged out player's blocks have less tick time than players who are online (Config customizable)!

When entities spawn or move between chunks, their tracker is updated to match the most dominant tracker (cached) from that chunk. This means that there's full support for entity throttling as well. The most dominant tracker is generated by selecting the owner with the most blocks in a chunk. You take control of a chunk by building in it automatically.

Integration

  • SpongeForge
    • Permissions, commands, customized ticking logic
  • GriefPrevention
    • Claims automagically set the tracker in the claimed area, and lock it to that owner for as long as that claim is present
  • GriefDefender
    • Claims automagically set the tracker in the claimed area, and lock it to that owner for as long as that claim is present
  • FTB Utilities
    • Claims automagically set the tracker in the claimed area, and lock it to that owner for as long as that claim is present (Useful for basemates)
  • LagGoggles (Work in progress...)
    • Interface for not-so-tech-savvy players.

All of the above are optional.

How it functions

All calls to Block.randomTickBlock(), Block.updateTickBlock(), Entity.onUpdate() and ITickable.tickTileEntity() are redirected to Tiquality, which in turn finds the owner of a block or entity using a customized high performance lookup.

There are trackers associated with the block positions of the world and entities, these trackers record how long an update took, and subtract that from the 'granted nanoseconds' until it reaches zero. When it reaches zero all future updates are queued for later, and the update doesn't execute right away.

When the next tick comes around, all trackers get a granted amount of tracking time, meaning blocks update again. The queue is executed first. If the queue doesn't complete, new updates will be added to the queue if it isn't already.

If a player isn't using up all his tick time, the remaining time will be consumed by players who who have used up all their time.

You can share tick time with other players using /tq share. This is useful for basemates.

Commands and permissions

  • /tiquality

    • Main command
    • tiquality.use
  • /tq

    • Alias for /tiquality
    • tiquality.use
  • /tq info [point]

    • Prints info about the block you're standing on and the block your feet are inside (Liquids).
      Prints the owner of the block(s)
      Prints the current status if a block is on the whitelist or not.
      If used with the 'point' flag, you can aim at blocks and sneak for quick info on who tracked a block.
    • tiquality.use
  • /tq share <playername>

    • Allows sharing tick time with basemates, meaning that you can keep playing if the base owner is offline. If both of you are online, the tick time is effectively doubled.
    • tiquality.use
  • /tq track

    • Claims a block for a player without actually having to re-place it. (Things found in nature, existing bases... etc)
    • tiquality.use
  • /tq claim [radius]

    • Claims an area for a player. The maximum radius is defined using MAX_CLAIM_RADIUS in the config. If the radius parameter is omitted, the maximum value in the config is used instead. This is especially useful if you have just installed Tiquality and need to import bases into your existing world.
    • tiquality.claim
  • /tq acceptoverride <player>

    • Allows another player to claim your area after a failed claim attempt. You will receive a message on when to use this.
    • tiquality.use
  • /tq denyoverride <player>

    • Denies another player to claim your area after a failed claim attempt. You will receive a message on when to use this.
    • tiquality.use
  • /tq unclaim [radius]

    • Unclaims an area, useful for admins.
    • tiquality.admin
  • /tq profile <seconds>

    • Runs a very basic profiler on blocks that you own. A better alternative is in the works.
    • tiquality.use
  • /tq profile <seconds> <uuid or playername>

    • Runs a very basic profiler on the targeted UUID or playername. A better alternative is in the works.
    • tiquality.admin
  • /tq setblock <feet|below> <DEFAULT|NATURAL|PRIORITY|ALWAYS_TICK|TICK_DENIED>

    • Sets all the blocks of the specified type to change tick behavior.
      Valid types are:
      • DEFAULT:
        • Only ticks when a tracker is assigned AND has time to tick. Can be throttled
      • PRIORITY:
        • Like DEFAULT, but ticks before everything else in the same tracker. Can be throttled
      • TICK_DENIED:
        • Never ticks
      • NATURAL: Ticks when either:
        • Ticks when no tracker is assigned. When a tracker has been assigned, it can be throttled
      • ALWAYS_TICK:
        • Always ticks, never throttled. If a tracker has been assigned, it will still affect the granted time for a tracker.
    • tiquality.admin
  • /tq setentity <entity_name> <DEFAULT|NATURAL|PRIORITY|ALWAYS_TICK|TICK_DENIED>

    • Sets all the entities of the specified type to change tick behavior.
      Valid types are:
      • DEFAULT:
        • Ticks when no tracker is assigned. When a tracker has been assigned, it can be throttled if no time is left.
      • PRIORITY:
        • Like DEFAULT, but ticks before everything else in the same tracker. Can be throttled
      • TICK_DENIED:
        • Never ticks
      • NATURAL: Ticks when either:
        • Exactly the same as DEFAULT
      • ALWAYS_TICK:
        • Always ticks, never throttled. If a tracker has been assigned, it will still affect the granted time for a tracker.
    • tiquality.admin
  • /tq reload

    • Reloads the config file.
    • tiquality.admin

Frequently asked questions

Why don't you move to Sponge already!?

It is my intention to make Tiquality as widely available to everyone. Not having to install Sponge, match the Forge version, find mods that are both compatible with Sponge and that specific Forge version makes it easier to install. Everyone should be able to use Tiquality, even if you run a Sponge-free server.

Sponge is still supported, however.

What does /tq info do?

It helps you diagnose if a block can be ticked or not, as well as finding names to use in the config

Stand on top of the block and use /tq info. The output will be as follows:

No entities are found in your chunk
Block below: minecraft:piston TickType: DEFAULT Status: Tracked by: Terminator_NL

We can break this down:

  • "minecraft:piston" is the block name
  • "TickType: DEFAULT" means that this block will only tick if a tracker has been assigned and has time to spare. (See: /tq track)
  • "Tracked by: XXX" tells us if a block is tracked or not, in this case: It is tracked by me.

Another example of tq info:

Entities in chunk:
minecraft:item PRIORITY Not tracked
Block below: minecraft:grass TickType: NATURAL Status: Not tracked

We can break this down:

  • "minecraft:item" is the entity name of a dropped item in the chunk
  • "minecraft:grass" is the block name
  • "TickType: NATURAL" means that this block type will tick if it's not tracked or the tracker has time to spare. (See: /tq setblock)
  • "Not tracked" tells us that no tracker has been assigned to this block.

Recommended usage:

  • tq info point which allows you to see what blocks are tracked simply by looking at them, and sneaking.
  • tq info to see if your config changes worked, or helps players diagnose server configuration issues.

My blocks don't tick! What do I do?

A block will tick if at least one of the following statements is true:

  • There's a Tracker assigned and the tracker has enough time to tick the block
  • The block is defined in the config (NATURAL_BLOCKS) and there's no tracker assigned to it
  • The block is defined in the config (NATURAL_BLOCKS) and the tracker has enough time to tick the block
  • The block is defined in the config (ALWAYS_TICKED_BLOCKS) It will tick even if a tracker has been assigned that ran out of time. Note that this will still consume the time on the tracker.

The fastest way to solve this is simply by standing on the block and running /tq setblock below NATURAL. It will add the block to the config under NATURAL_BLOCKS.

Pro tip: Use /tq info first, to see if you are actually positioned on the block correctly.

My fluids don't flow! What do I do?

Fluid's are tracked the same way as blocks.

The fastest way to solve this is simply by standing in the liquid and running /tq setblock feet NATURAL. It will add the fluid to the config under NATURAL_BLOCKS.

Pro tip: Use /tq info first, to see if you are actually positioned in the liquid correctly.

I just installed Tiquality, and the TPS is HORRIBLE!

Keep in mind, that there are MANY other reasons the TPS can still not be 20. Chunkloading unloaded chunks is one of the big effectors: people exploring, or logging in. Another big effector is post-world-tick processing. Tiquality does NOT hook into world events, so any processing AFTER the world tick is completely outside of Tiquality's control. You can try to raise the config value TIME_BETWEEN_TICKS_IN_NS. Remember that increasing this value will cause the world to stop ticking sooner, effectively making the world tick slower.

Where is the data stored?

The data is stored in the world folder under TiqualityStorage. Inspired by minecraft's own code, Tiquality also uses bitshifting to find the right identifier for a block, without having to iterate on anything. This means blazing fast performance, and this is needed because Tiquality has to intercept and act on every ticked object.

I have an idea! What can I do to help?

Make an issue at GitHub and I'll give you some feedback. (I might already have considered your idea!) After that, fork Tiquality and just make a pull request! If you can't code, you can obviously still submit requests, and I will implement it as long as it fits the scope of the project.

tiquality's People

Contributors

clienthax avatar terminatornl 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

Watchers

 avatar  avatar  avatar

tiquality's Issues

Mixin error on SpongeForge server

Minecraft: 1.12.2
SpongeAPI: 7.1.0-b2736425
Sponge: 1.12.2-7.1.6-SNAPSHOT
SpongeForge: 1.12.2-2768-7.1.6-RC3641
Minecraft Forge: 14.23.5.2796

Mods (56): Minecraft, Minecraft Coder Pack, Forge Mod Loader, Minecraft Forge, SpongeAPI, Sponge, AI Improvements, Applied Energistics 2, Better Questing, BiblioCraft, Binnie Core, Binnie's Botany, Binnie's Design, Binnie's Extra Bees, Binnie's Extra Trees, Binnie's Genetics, CoFH Core, CoFH World, CodeChicken Lib, Console Filter, Construct's Armory, CraftTweaker JEI Support, CraftTweaker2, CreativeCore, CreativeCoreDummy, CustomNPCs, Ex Nihilo Creatio, Fishing Net Mod, Forestry, HoloInventory, Iron Chest, ItemPhysic, Just Enough Items, MTLib, Mantle, McJtyLib, Mekanism, Mod Tweaker, PortalGun, Quick Leaf Decay, Redstone Arsenal, Redstone Flux, Shadowfacts' Forgelin, SpongeForge, Standard Expansion, Thermal Expansion, Thermal Foundation, Thermal Innovation, Thermal Tinkering, Tinkers' Construct, Tiquality, Tree Chopper, UniDict, WanionLib, XNet, iChunUtil

Plugins (26): Minecraft, Minecraft Coder Pack, SpongeAPI, Sponge, FastAsyncWorldEdit, BeanCore, CatClearLag, CommandSync, DupeFixer, EconomyLite, GriefPrevention, GuiShopManager, Holograms, HuskyCrates, HuskyUI, LuckPerms, Nucleus, ProjectCore, SkyClaims, StackBan, UltimateChat, UniversalMarket, VirtualTool, Wasted, WorldEdit, spark

After the server has finished loading, an error appears. -> https://pastebin.com/X3MiF7Mp

Feature Request - Claim Chunks

When adding this mod to an existing world, it's overwhelming to have to break and replace every tile entity or stand above and run /tq track on every one. It would be great to be able to run a command that "claims" all of the tile entities within the chunk. Perhaps even better would be integration with FTB Utilities chunk claiming such that all tile entities within my claims would automatically be owned by me. I believe this is similar to what you're doing with GriefPrevention(?).

Required - ClaimShare and UnclaimShare Commands 1.12.2

Alright so I have run into a new problem in 1.12.2 where when people want to live together and one person is offline half the base is basically offline. Can you please add a ClaimShare Command that allows you to keep the area working even when Allies are offline? Traversely you should also probably add UnclaimShare if you chose not to live with someone.

Can't join a modded server

So i'm trying to setup a local modded server (Mystical+Skies-1.5.1) and added this mod (Tiquality-THIN-1.12.2-GAMMA-1.0.1) together with TickProfiler & LagGoggles.

The first login went normal, after that whenever I try to relog, it wouldn't let me. Things I have tried:

  • Removing the mod lets me login fine.
  • Deleting TiqualityStorage.nbt doesn't fix the problem.
  • Deleting the config also doesn't fix the problem.

latest.log

java.lang.NullPointerException on login

My server was working fine, then players started reporting an internal server error on login. It effects all players. I didn't change anything on the server when the error reports started.

Modpack: Manufactio version 0.95
Forge: forge-1.12.2-14.23.5.2822-universal
Tiquality: Tiquality-FAT-1.12.2-GAMMA-1.3.0

[21:17:31] [Server thread/WARN] [net.minecraft.network.NetworkSystem]: Failed to handle packet for /192.168.15.1:58790
java.lang.NullPointerException: null
        at cf.terminator.tiquality.util.PersistentData.getCompoundTag(PersistentData.java:80) ~[PersistentData.class:?]
        at cf.terminator.tiquality.tracking.TrackerHolder.getTrackerHolder(TrackerHolder.java:99) ~[TrackerHolder.class:?]
        at net.minecraft.world.chunk.Chunk.tiquality_loadNBT(Chunk.java:2867) ~[axw.class:?]
        at cf.terminator.tiquality.monitor.ChunkLoadMonitor.onNBTLoad(ChunkLoadMonitor.java:37) ~[ChunkLoadMonitor.class:?]
        at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_755_ChunkLoadMonitor_onNBTLoad_Load.invoke(.dynamic) ~[?:?]
        at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?]
        at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) ~[EventBus.class:?]
        at net.minecraftforge.common.chunkio.ChunkIOProvider.syncCallback(ChunkIOProvider.java:103) ~[ChunkIOProvider.class:?]
        at net.minecraftforge.common.chunkio.ChunkIOExecutor.syncChunkLoad(ChunkIOExecutor.java:94) ~[ChunkIOExecutor.class:?]
        at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:118) ~[on.class:?]
        at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:89) ~[on.class:?]
        at net.minecraft.world.gen.ChunkProviderServer.provideChunk(ChunkProviderServer.java:135) ~[on.class:?]
        at net.minecraft.world.World.getChunk(World.java:310) ~[amu.class:?]
        at net.minecraft.world.World.getChunk(World.java:305) ~[amu.class:?]
        at net.minecraft.world.World.getTopSolidOrLiquidBlock(World.java:1619) ~[amu.class:?]
        at net.minecraft.world.WorldProvider.getRandomizedSpawnPoint(WorldProvider.java:350) ~[aym.class:?]
        at net.minecraft.entity.player.EntityPlayerMP.<init>(EntityPlayerMP.java:161) ~[oq.class:?]
        at net.minecraft.server.management.PlayerList.createPlayerForUser(PlayerList.java:504) ~[pl.class:?]
        at net.minecraft.server.network.NetHandlerLoginServer.tryAcceptPlayer(NetHandlerLoginServer.java:135) ~[pc.class:?]
        at net.minecraft.server.network.NetHandlerLoginServer.update(NetHandlerLoginServer.java:63) ~[pc.class:?]
        at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:285) ~[gw.class:?]
        at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:180) [oz.class:?]
        at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:790) [MinecraftServer.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.updateTimeLightAndEntities(DedicatedServer.java:397) [nz.class:?]
        at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:668) [MinecraftServer.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526) [MinecraftServer.class:?]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]
[21:17:31] [Server thread/INFO] [net.minecraft.server.network.NetHandlerLoginServer]: com.mojang.authlib.GameProfile@7f31a874[id=2e15e144-51b9-4f4b-a495-74dc0765a409,name=bluelightning32,properties={textures=[com.mojang.authlib.properties.Property@3c5c162e]},legacy=false] (/192.168.15.1:58790) lost connection: Internal server error

Full log: https://gist.github.com/bluelightning32/888d692c54e0139dc4c6b9e0addd9529

Possible problem?

!I did not test this!
To explain the problem I'll use an example:
Say you have a skyblock modded server.
3 players decided to work as a group on one island.
They create a system of blocks together, so that means some blocks belong to one player, while others to another, while they are all online, it works nicely.
From reading your explanation I judge that if only 1 of the players is online the system might not work properly because the "offline player" tick time may be disabled or really low, which would result in part of the system not ticking. That is because I don't see anyone giving "offline players" the same tick time as "online players".
Possible solution:
I suggest adding grouping of players. That way if only 1 player of a group is online he loads all of the blocks of the group.

I hope this somewhat explains the possible problem I'm seeing and gives you some ideas. :)

Graves

Hi, i've tested this on two servers, my local server and a hosted server and each one causes players to no longer be able to pick up their graves with the kay. I'm running the ATM3 Remix v 1.0.1 mod without sponge

CC: Tweaked not functioning properly with TiQuality

Forge 2847 or even Forge 2838
Tiquality 1.72 FAT
Minecraft 1.12.2
Computercraft: Tweaked 1.86.0
Can replicate in client or on server.

Install mods
Start singleplayer or server
Place Mining Turtle
Give it a command (Excavate or Tunnel) and make sure there is fuel
It will move very short and stop functioning. Removing TiQuality allows them to function fine

[BUG] Completely Ignoring AcceptOverrides - 1.12.2 -1.5.3-Gamma

Describe the bug
A clear and concise description of what the bug is.

It is ignoring claims still

To Reproduce
Steps to reproduce the behavior

Add to modpack server and attempt command

Which Forge version are you using?

1.12.2 - 14.23.5.2838

If you used the word 'error' somewhere, always provide the stack trace along with both debug.log and latest.log

debug.log
latest.log
2019-07-06 20_29_46-

???? -- randomly stop working

things like furnaces and xnet and possibly other TE will not tick for random players if u could add more debug info possibly
consider adding me on discord ( Bucky420#1937 ) so i can help more :)

what happened was i went to a players base and his furnace would not work but if i placed one it would work fine and yes i did check his /tq profile it was fine

do note i had to remove the mod cause of this and in order to re add it i would need some sort of area based claiming probably a cuboid would be best as players do not understand or like when i have to add this and they must replace all there blocks or /tq claim i really want to use the mod hope we can get it working :)

[MOVED] Conflict with mod Tiquality. #2458

Moved issue from SpongeForge to Tiquality

@mr-krab wrote:

I am currently running SpongeForge version: 1.12.2-2705-7.1.0-BETA-3460 Forge version: 14.23.4.2747 Java version: Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Operating System: Debian 9 Plugins (27): Minecraft, Minecraft Coder Pack, SpongeAPI, SpongeForge, FastAsyncWorldEdit, BeanCore, CatClearLag, CommandSync, EconomyLite, GriefPrevention, Holograms, HuskyCrates, HuskyUI, LuckPerms, Nucleus, PlaceholderAPI, ProjectCore, QuestItemHelper, SkyClaims, StackBan, UltimateChat, UniversalMarket, VirtualChest, VirtualTool, Wasted, WorldEdit, spark Mods (51): Minecraft, Minecraft Coder Pack, Forge Mod Loader, Minecraft Forge, SpongeAPI, SpongeForge, AI Improvements, Auto Crafter, BiblioCraft, CoFH Core, CoFH World, CodeChicken Lib, Console Filter, Construct's Armory, CraftTweaker JEI Support, CraftTweaker2, CreativeCore, CreativeCoreDummy, CustomNPCs, Dungeon Mods, Ex Nihilo Creatio, Fishing Net Mod, Hammer Core, HoloInventory, Immersive Engineering, Immersive Tech, InstantUnify, Iron Chest, ItemPhysic, Just Enough Items, LagGoggles, MTLib, Mantle, McJtyLib, Mekanism, Mod Tweaker, MrCrayfish's Furniture Mod, Parachronology, Quick Leaf Decay, Redstone Arsenal, Redstone Flux, Solar Flux Reborn, Thermal Dynamics, Thermal Expansion, Thermal Foundation, Thermal Innovation, Tinkers' Construct, Tree Chopper, UniDict, VanillaFix, WanionLib

Issue Description

The physics of liquids is blocked. Sometimes there are problems with TileEntity. ะกan do without this mod on the server, but then should perhaps add its functionality to Sponge(optional). https://minecraft.curseforge.com/projects/tiquality The logs are clean. No error messages whith this problem.

@TerminatorNL Problems are observed even with water and lava. These liquids are already in the white list.

[Bug] Cant spawn by spawner

Describe the bug
Cant spawn by spawner from mods
Ancient Warfare 2
The Twilight Forest

To Reproduce
Install one and Ti. And place a spawner

Which Forge version are you using?
forge-1.12.2-14.23.5.2838-universal
Which SpongeForge version are you using?
spongeforge-1.12.2-2838-7.1.7-RC3899
Please provide the early startup messages starting with [Tiquality-Boot]

[21:55:50] [main/INFO] [Tiquality-Boot]: I am located here: file:\D:\MCSManager\server\server_core\Angry_stonefish_v2\.\mods\%5Bไผ˜ๅŒ–%5DTiquality-THIN-1.12.2-GAMMA-1.7.2.jar!\com\github\terminatornl\tiquality\Tiquality.class
[21:55:50] [main/INFO] [Tiquality-Boot]: I am designed for Forge version: 1.12.2-14.23.5.2838
[21:55:50] [main/INFO] [Tiquality-Boot]: Loading server classes
[21:55:50] [main/INFO] [Tiquality-Boot]: SpongeForge is present!
[21:55:50] [main/INFO] [Tiquality-Boot]: I am designed for SpongeForge version: 1.12.2-2838-7.1.7-RC3886
[21:55:50] [main/WARN] [Tiquality-Boot]: SpongeForge version is different than expected!
[21:55:50] [main/WARN] [Tiquality-Boot]: This could result in undefined behavior.
[21:55:50] [main/WARN] [Tiquality-Boot]: 
[21:55:50] [main/WARN] [Tiquality-Boot]: Expected: '1.12.2-2838-7.1.7-RC3886', but you have: '1.12.2-2838-7.1.7-RC3899' installed.
[21:55:50] [main/INFO] [Tiquality-Boot]: We're running in a production environment.

Crash on creating/loading Single Player world

Forge Version: 14.23.5.2786
Tiquality Version: FAT-1.12.2-BETA-0.9.3
Crash Log: https://gist.github.com/Andromander/9a9dfc1d0cbf0fec5b5d94a832ba13fa
Full Log: https://gist.github.com/Andromander/dc2aa3a20a9df961f9f9336a0d560f5a


Steps to Reproduce:

  1. With Tiquality installed, start a new single player world
  2. After failing, attempt to load the world with Tiquality installed
  3. Disable Tiquality, then reload the world once more

When attempting to create a new world or load a single player world with this mod installed, the result is this crash. The world that I tested was attempting to create it first, and then attempt to load it after it crashes when the world was being created. Disabling the mod and then attempting to load said world does not cause it to crash.

Though the circumstances of having Tiquality in a Single Player world would be somewhat counter intuitive, it does make creating an integrated server a little more difficult.

[Bug] Incompatible with Laggoggles

Describe the bug

[22:09:57] [Server thread/INFO] [laggoggles]: Loading mixin target class: net.minecraft.world.WorldServer
[22:09:57] [Server thread/FATAL] [laggoggles]: Not all required mixins have been applied!
[22:09:57] [Server thread/FATAL] [laggoggles]: To prevent you from wasting your time, the process has ended.
[22:09:57] [Server thread/FATAL] [laggoggles]: 
[22:09:57] [Server thread/FATAL] [laggoggles]: Required mixins that have not been applied:
[22:09:57] [Server thread/FATAL] [laggoggles]: - cf.terminator.laggoggles.mixin.MixinWorldServerSponge targeting: net.minecraft.world.WorldServer
[22:09:57] [Server thread/FATAL] [laggoggles]: 
[22:09:57] [Server thread/FATAL] [laggoggles]: This means that LagGoggles will not function properly.
[22:09:57] [Server thread/FATAL] [laggoggles]: Make sure your versions are correct for Forge as well as SpongeForge.
[22:09:57] [Server thread/FATAL] [laggoggles]: 
[22:09:57] [Server thread/WARN] [FML]: Java has been asked to exit (code 1)
[22:09:57] [Server thread/WARN] [FML]: Exit trace:
[22:09:57] [Server thread/WARN] [FML]: 	cf.terminator.laggoggles.mixinhelper.MixinValidator.validate(MixinValidator.java:53)
[22:09:57] [Server thread/WARN] [FML]: 	cf.terminator.laggoggles.Main.preinit(Main.java:33)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:09:57] [Server thread/WARN] [FML]: 	java.lang.reflect.Method.invoke(Method.java:498)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:637)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:09:57] [Server thread/WARN] [FML]: 	java.lang.reflect.Method.invoke(Method.java:498)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.EventBus.post(EventBus.java:217)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:219)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:197)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[22:09:57] [Server thread/WARN] [FML]: 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:09:57] [Server thread/WARN] [FML]: 	java.lang.reflect.Method.invoke(Method.java:498)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116)
[22:09:57] [Server thread/WARN] [FML]: 	com.google.common.eventbus.EventBus.post(EventBus.java:217)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.common.LoadController.redirect$forgeImpl$PostEvent$zza000(LoadController.java:568)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:136)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:629)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:99)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:333)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:125)
[22:09:57] [Server thread/WARN] [FML]: 	net.minecraft.server.MinecraftServer.run(MinecraftServer.java:486)
[22:09:57] [Server thread/WARN] [FML]: 	java.lang.Thread.run(Thread.java:813)
[22:09:57] [Server Shutdown Thread/INFO] [net.minecraft.server.MinecraftServer]: Stopping server

To Reproduce
Steps to reproduce the behavior
LagGoggles-FAT-1.12.2-4.9.jar

Which Forge version are you using?
forge-1.12.2-14.23.5.2847-universal.jar

Which SpongeForge version are you using?
spongeforge-1.12.2-2838-7.1.8-RC3970.jar

Please provide the early startup messages starting with [Tiquality-Boot]

[22:08:28] [main/INFO] [Tiquality-Boot]: I am located here: file:/home/container/./mods/Tiquality-FAT-1.12.2-GAMMA-1.7.2.jar!/com/github/terminatornl/tiquality/Tiquality.class
[22:08:28] [main/INFO] [Tiquality-Boot]: I am designed for Forge version: 1.12.2-14.23.5.2838
[22:08:28] [main/INFO] [Tiquality-Boot]: Loading server classes
[22:08:28] [main/INFO] [Tiquality-Boot]: SpongeForge is present!
[22:08:28] [main/INFO] [Tiquality-Boot]: I am designed for SpongeForge version: 1.12.2-2838-7.1.7-RC3886
[22:08:28] [main/WARN] [Tiquality-Boot]: SpongeForge version is different than expected!
[22:08:28] [main/WARN] [Tiquality-Boot]: This could result in undefined behavior.
[22:08:28] [main/WARN] [Tiquality-Boot]: 
[22:08:28] [main/WARN] [Tiquality-Boot]: Expected: '1.12.2-2838-7.1.7-RC3886', but you have: '1.12.2-2838-7.1.8-RC3970' installed.
[22:08:28] [main/INFO] [Tiquality-Boot]: We're running in a production environment.

If you used the word 'error' somewhere, always provide the stack trace along with both debug.log and latest.log

tq claim triggers ConcurrentModificationException

Modpack: Manufactio version 0.95
Forge: forge-1.12.2-14.23.5.2822-universal
Tiquality: Tiquality-FAT-1.12.2-GAMMA-1.4.1

Whenever a player runs /tq claim, the server crashes. When the server starts back up, the chunk is claimed. A player triggered this twice in a row on the server before I removed Tiquality again.

java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.remove(HashMap.java:1459)
        at net.minecraft.world.gen.ChunkProviderServer.tick(ChunkProviderServer.java:262)
        at net.minecraft.world.WorldServer.tick(WorldServer.java:207)
        at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:756)
        at net.minecraft.server.dedicated.DedicatedServer.updateTimeLightAndEntities(DedicatedServer.java:397)
        at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:668)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526)
        at java.lang.Thread.run(Thread.java:748)

Crash report: https://gist.github.com/bluelightning32/746748c74b73e388aef46add939118e5

[Feature Request] player the message on load

If the player uses a high performance server, player ticking is slow. I suggest adding a message to the player if it creates a load. Since many players can not understand why their mechanisms slow down.
[sorry for my bad english :)) ]

[Bug] PhaseState flood

Describe the bug
PhaseState flood

To Reproduce
Start server

Which Forge version are you using?
tested on 14.23.5.2847 or 14.23.5.2838

Which SpongeForge version are you using?
1.12.2-2838-7.1.7-RC3924 or 1.12.2-2838-7.1.7-RC3902

debug.txt

[Bug] Crash server

Describe the bug
Crash

To Reproduce
start server
Which Forge version are you using?
2838
Which SpongeForge version are you using?
1.12.2-2838-7.1.7-RC3848

debug.txt

Crash on Start SpongeForge

System: Debian 9
Java: Java(TM) SE Runtime Environment (build 1.8.0_191-b12)

SpongeAPI: 7.1.0-6eb292fd
Sponge: 1.12.2-7.1.5-SNAPSHOT
SpongeForge: 1.12.2-2768-7.1.5-RC3508
Minecraft Forge: 14.23.5.2770

Plugins (28): Minecraft, Minecraft Coder Pack, SpongeAPI, Sponge, FastAsyncWorldEdit, BeanCore, CatClearLag, CommandSync, EconomyLite, GriefPrevention, GuiShopManager, Holograms, HuskyCrates, HuskyUI, LuckPerms, Nucleus, PlaceholderAPI, ProjectCore, QuestItemHelper, SkyClaims, StackBan, UltimateChat, UniversalMarket, VirtualChest, VirtualTool, Wasted, WorldEdit, spark

Mods (54): Minecraft, Minecraft Coder Pack, Forge Mod Loader, Minecraft Forge, SpongeAPI, Sponge, AI Improvements, BiblioCraft, Binnie Core, Binnie's Botany, Binnie's Design, Binnie's Extra Bees, Binnie's Extra Trees, Binnie's Genetics, CoFH Core, CoFH World, CodeChicken Lib, Console Filter, Construct's Armory, CraftTweaker JEI Support, CraftTweaker2, CreativeCore, CreativeCoreDummy, CustomNPCs, Deadly Monsters, Ex Nihilo Creatio, Fishing Net Mod, Forestry, Hammer Core, HoloInventory, InstantUnify, Iron Chest, ItemPhysic, Just Enough Items, LagGoggles, MTLib, Mantle, McJtyLib, Mod Tweaker, MrCrayfish's Furniture Mod, Quick Leaf Decay, Redstone Arsenal, Redstone Flux, Solar Flux Reborn, SpongeForge, Thermal Dynamics, Thermal Expansion, Thermal Foundation, Thermal Innovation, Tinkers' Construct, Tree Chopper, UniDict, VanillaFix, WanionLib

latest.log

WorldGuard support

Would you like to introduce support for the import of WorldGuard regions in the mod?
This is very useful for Forge + Spigot servers.

Crash while exploring new chunks in SSP...

As the title says, I experience a crash at times while roaming around in new chunks. I am unsure as to the cause of this crash and it is ...difficult to replicate. I am also using a rather obnoxious amount of mods in a personal pack to further complicate matters. I won't be offended if the issue gets closed and is unrelated to Thaumic Gadgets, but seeing as it was mentioned prominently in the stack trace here is the crash report...
https://pastebin.com/eM4chSnm

The crash doesn't happen with any regularity that I can see. I am using forge 14.23.5.2823 along with Thaumic Gadgets 0.1.5.1_tb.26. Please let me know if I can provide any further information.

[Bug]Plant gatherer Leaf Decay causing ticking block exception with tiquality installed.

Describe the bug
This may or may not be tiquality based but the crashes don't happen without the mod installed so it's at the least compounding the problem.

Server will crash on leaf decay from a IF plant gatherer tree farm

Leaves are set as natural blocks in the tiquality config just incase you ask

To Reproduce
Unclear, Plant gatherer from Industrial Foregoing and tree farm, one player's setup will crash the server as soon as it's operational but a test setup does not. possible the test farm was not large enough or similar.

Which Forge version are you using?
Forge 1.12.2-14.23.5.2847
If you used the word 'error' somewhere, always provide the stack trace along with both debug.log and latest.log

Crashlog
https://gist.github.com/MrNinja93/148716f5b2df1056e11afce796a4b5b8

Mod exception in sponge server

Fruit tree saplings can grow into trees, but the fruits on the trees cannot grow naturally, but they can be ripened with bone meal. Used the / gamerule randomTickSpeed โ€‹โ€‹100 instruction, but it has no effect.
In addition, after using the / gamerule randomTickSpeed โ€‹โ€‹100 command, normal crops (including the original and mod additions) can be seen to grow normally and quickly, and the grass block spread speed is also faster, which indicates that the command itself has effect, but it is not effective on the fruit.

This is the content of the server configuration file Quality.cfg

`# Configuration file

tiquality {
# When a tracker is being throttled, we can send a notification to the user.
# How often do you want the user to receive a message about his/her personal tick speed?
#
# Note: If you don't want to send a message at all, set DEFAULT_THROTTLE_WARNING_LEVEL to 1.
# Min: 0
# Max: 2147483647
I:DEFAULT_THROTTLE_WARNING_INTERVAL_SECONDS=600

# When a tracker is being throttled, we can send a notification to the user.
# Throttling is measured by comparing the full tick cycles within ticking queues and comparing that to the server ticks.
# Every 100 server ticks the amount of completed full ticks of the tracker is compared.
# 
# If the tracker is falling behind (actively throttling) the value for this tracker gets closer to zero. In
# comparison, a tracker that runs at full speed will have a value of 1 (100%)
# Whenever the value falls below the value specified here, a warning will be sent to the tracker
# 
# There's currently a limitation making warning levels between 0.5 and 1.0 unreliable. (Between 50% and 100% speed)
# 
# Set to 1 to disable
# 
# Note: If the server is ticking at 18 TPS, the tracker can still have a value of 1. Server tick speed does not impact this value.
# Min: 0.0
# Max: 1.0
D:DEFAULT_THROTTLE_WARNING_LEVEL=0.5

# Define a maximum square range someone can claim using /tq claim [range].
# This will also be the default value for usage of /tq claim [range] without the range argument
I:MAX_CLAIM_RADIUS=50

# Tiquality pre-allocates the max tick time someone can use.
# This includes offline players (Loaded chunks with an offline player's base, for example)
# With this in mind, what multiplier should we use to assign tick time to them?
# 
# Where 0 means offline player's base does not get any pre-allocated tick time and 1 means they will get the same tick time as an online player.
# Keep in mind that people might be living together...
# Min: 0.0
# Max: 1.0
D:OFFLINE_PLAYER_TICK_TIME_MULTIPLIER=0.5

# Tiquality stores data in every affected chunk, but it's possible
# tiquality's data can get corrupted somehow. In order to still be able to use tiquality
# without resetting your world, we can store data in a different tag in the chunk.
# 
# WARNING: Changing this value will erase previous data saved by tiquality, but will not
# affect other data (Your world stays intact, but tiquality has a clean slate)
# 
# Just increase this number by one if you run into problems. Don't forget to submit a
# detailed bug report on Github if you run into unexpected problems.
# 
# New versions of Tiquality with incompatible storage data will override this setting for you automatically.
I:SAVE_VERSION=0

# Between ticks, the server must do some internal processing.
# Increase this value if you see "can't keep up!" errors.
# Try to keep this value as low as possible for performance.
# Min: 0
# Max: 2147483647
I:TIME_BETWEEN_TICKS_IN_NS=90000

# The alias for the /tiquality command.
# Bear in mind that when this alias is already in use by another mod, we skip command registration entirely. (Even /tiquality)
S:TIQUALITY_COMMAND_ALIAS=tq

##########################################################################################################
# block_tick_behavior
#--------------------------------------------------------------------------------------------------------#
# A block will tick if at least one of the following statements is true:
# - There's a Tracker assigned and the tracker has enough time to tick the block
# - The block is defined in the config NATURAL_BLOCKS and there's no tracker assigned to it
# - The block is defined in the config NATURAL_BLOCKS and the tracker has enough time to tick the block
# - The block is defined in the config ALWAYS_TICKED_BLOCKS It will tick even if a tracker has been assigned that ran out of time. Note that this will still consume the time on the tracker.
# 
# Try running `/tq set <below|feet> DEFAULT`. It will remove the block from the config, returning default behavior.
# Try running `/tq set <below|feet> NATURAL`. It will add the block to the config under NATURAL_BLOCKS.
# Try running `/tq set <below|feet> PRIORITY`. It will add the block to the config under PRIORITY_BLOCKS.
# Try running `/tq set <below|feet> ALWAYS_TICK`. It will add the block to the config under ALWAYS_TICKED_BLOCKS.
# Try running `/tq set <below|feet> TICK_DENIED`. It will add the block to the config under TICK_DENIED_BLOCKS.
# 
# Protip: Use /tq info first, to see if you are actually positioned on the block correctly.
# 
# For nicer formatting, see: https://github.com/TerminatorNL/Tiquality/blob/master/README.md#my-blocks-dont-tick-what-do-i-do
##########################################################################################################

block_tick_behavior {
    # Some blocks, you simply don't want to be throttled, ever. For example: piston extensions.
    # Tiquality will still attempt to tick them per player, but if the player runs out of tick time, it will still tick these blocks.
    # Items in this list are also appended to NATURAL_BLOCKS through code, there is no need to define blocks twice.
    S:ALWAYS_TICKED_BLOCKS <
        minecraft:piston_extension
        minecraft:piston_head
        minecraft:portal
     >

    # Some blocks are automatically generated in the world, but do require ticking in order to function properly.
    # Define the blocks you wish to keep tick when the block has not been assigned an owner yet.
    # Keep in mind, if there is an owner set on this block, the block can be throttled. See: ALWAYS_TICKED_BLOCKS
    S:NATURAL_BLOCKS <
        minecraft:mob_spawner
        minecraft:chest
        minecraft:ender_chest
        minecraft:trapped_chest
        REGEX=leaves
        REGEX=sapling
        REGEX=flowing
        minecraft:snow_layer
        minecraft:ice
        minecraft:water
        minecraft:lava
        minecraft:grass
        minecraft:sand
        minecraft:gravel
        minecraft:beetroots
        minecraft:wheat
        minecraft:carrots
        minecraft:potatoes
        minecraft:reeds
        minecraft:farmland
        minecraft:fire
        minecraft:cocoa
        minecraft:cactus
        minecraft:double_plant
     >

    # When people run bases, you can prioritize which blocks have to be updated first. Unlinke
    # ALWAYS_TICKED_BLOCKS, PRIORITY_BLOCKS can be throttled.
    S:PRIORITY_BLOCKS <
     >

    # Blocks you never want to tick are defined here. Useful for stopping dupes or game breaking lag without banning recipes!
    S:TICK_DENIED_BLOCKS <
     >
}

##########################################################################################################
# entity_tick_behavior
#--------------------------------------------------------------------------------------------------------#
# Entity handling is a bit different than blocks. DEFAULT behavior is the same as NATURAL in blocks.
##########################################################################################################

entity_tick_behavior {
    # Some entities, you simply don't want to be throttled, ever.
    # Tiquality will still attempt to tick them per player, but if the player runs out of tick time, it will still tick these entities.
    # Players are hardcoded to be in this category.
    S:ALWAYS_TICKED_ENTITIES <
     >

    # When people run bases, you can prioritize which entities have to be updated first. Unlike
    # ALWAYS_TICKED_ENTITIES, PRIORITY_ENTITIES can be throttled.
    # If you put 'minecraft:item' here, it will be easier for players to pick them up etc. Recommended.
    S:PRIORITY_ENTITIES <
        minecraft:item
        minecraft:falling_block
     >

    # Entities you never want to tick are defined here. Useful for stopping dupes or game breaking lag without banning recipes!
    S:TICK_DENIED_ENTITIES <
     >
}

}

`

Feature Request - Teams

One of the main problems we have when using this mod is that if I am sharing a base with another player, some blocks are owned by me, and others by my base-mate. If only one of us is online, machines placed by the other tick very slowly (or not at all depending on configs and server load). I would love to be able to share ownership of blocks with other members of my team. Perhaps this could integrate with FTB Utilities or vanilla scoreboard teams.

[Bug] Player Profile not found in cache console spam

Describe the bug
Console spam by tiquality constantly attempting to add what I assume is a fake player to cache and sending profile requests to mojang which fail as the uuid doesn't seem to exist.

To Reproduce
In this instance the block in question always seems to be a industrial foregoing crop sower.

I'd assume having one working with tiquality installed is enough to replicate (error has been present across multiple servers/packs with the same block as cause)

Which Forge version are you using?
Forge 14.23.5.2838
Tiquality 1.5.5 Fat

If you used the word 'error' somewhere, always provide the stack trace along with both debug.log and latest.log
Debug and Latest log
https://gist.github.com/MrNinja93/e523c8547082482e4d2a297be65b909d

Stack Trace

[17:49:42] [Server thread/WARN] [tiquality]: I will add it, but it can cause some lag, as I may or may not contact the Mojang servers to get go and get it.
[17:49:42] [Server thread/WARN] [tiquality]: UUID: ec5b5875-ebb5-4b47-833b-0de37ac9e6d7
[17:49:42] [Server thread/WARN] [tiquality]: Most significant bits:  -1415440394388944057
[17:49:42] [Server thread/WARN] [tiquality]: Least significant bits: -8990576960446273833
[17:49:42] [Server thread/WARN] [mojang/YggdrasilMinecraftSessionService]: Couldn't look up profile properties for com.mojang.authlib.GameProfile@1eeacbae[id=ec5b5875-ebb5-4b47-833b-0de37ac9e6d7,name=<null>,properties={},legacy=false]
com.mojang.authlib.exceptions.AuthenticationException: The client has sent too many requests within a certain amount of time
	at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.makeRequest(YggdrasilAuthenticationService.java:79) ~[YggdrasilAuthenticationService.class:?]
	at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillGameProfile(YggdrasilMinecraftSessionService.java:180) [YggdrasilMinecraftSessionService.class:?]
	at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillProfileProperties(YggdrasilMinecraftSessionService.java:173) [YggdrasilMinecraftSessionService.class:?]
	at cf.terminator.tiquality.util.ForgeData.getGameProfileByUUID(ForgeData.java:83) [ForgeData.class:?]
	at cf.terminator.tiquality.monitor.BlockPlaceMonitor.onBlockPlaceEvent(BlockPlaceMonitor.java:24) [BlockPlaceMonitor.class:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_1139_BlockPlaceMonitor_onBlockPlaceEvent_PlaceEvent.invoke(.dynamic) [?:?]
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) [ASMEventHandler.class:?]
	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) [EventBus.class:?]
	at net.minecraftforge.event.ForgeEventFactory.onPlayerBlockPlace(ForgeEventFactory.java:178) [ForgeEventFactory.class:?]
	at net.minecraftforge.common.ForgeHooks.onPlaceItemIntoWorld(ForgeHooks.java:920) [ForgeHooks.class:?]
	at net.minecraft.item.ItemStack.func_179546_a(ItemStack.java:186) [aip.class:?]
	at com.buuz135.industrial.tile.agriculture.CropSowerTile.work(CropSowerTile.java:148) [CropSowerTile.class:?]
	at com.buuz135.industrial.tile.WorkingAreaElectricMachine.performWork(WorkingAreaElectricMachine.java:112) [WorkingAreaElectricMachine.class:?]
	at net.ndrei.teslacorelib.tileentities.ElectricMachine.protectedUpdate(ElectricMachine.kt:280) [ElectricMachine.class:?]
	at com.buuz135.industrial.tile.CustomElectricMachine.protectedUpdate(CustomElectricMachine.java:120) [CustomElectricMachine.class:?]
	at net.ndrei.teslacorelib.tileentities.ElectricTileEntity.innerUpdate(ElectricTileEntity.kt:118) [ElectricTileEntity.class:?]
	at net.ndrei.teslacorelib.tileentities.SidedTileEntity.func_73660_a(SidedTileEntity.kt:991) [SidedTileEntity.class:?]
	at cf.terminator.tiquality.tracking.tickexecutors.ForgeTickExecutor.onTileEntityTick(ForgeTickExecutor.java:30) [ForgeTickExecutor.class:?]
	at net.minecraft.tileentity.TileEntity.tiquality_doUpdateTick(TileEntity.java:627) [avj.class:?]
	at cf.terminator.tiquality.tracking.TrackerBase.tickSimpleTickable(TrackerBase.java:217) [TrackerBase.class:?]
	at cf.terminator.tiquality.tracking.TickHub.onTileEntityTick(TickHub.java:63) [TickHub.class:?]
	at net.minecraft.world.World.redirect$onUpdateTileEntities$zzn000(World.java:5093) [amu.class:?]
	at net.minecraft.world.World.func_72939_s(World.java:1835) [amu.class:?]
	at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:613) [oo.class:?]
	at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:767) [MinecraftServer.class:?]
	at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:397) [nz.class:?]
	at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:668) [MinecraftServer.class:?]
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526) [MinecraftServer.class:?]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]```

More optimization?

The following lines should be modified to not use a HashMap, if possible.

if (updateOld() == false && TiqualityConfig.QuickConfig.TICKFORCING_OBJECTS_FAST.contains(tickable.getLocation().getBlock()) == false){

if(updateOld() == false && TiqualityConfig.QuickConfig.TICKFORCING_OBJECTS_FAST.contains(block) == false){

if(updateOld() == false && TiqualityConfig.QuickConfig.TICKFORCING_OBJECTS_FAST.contains(block) == false){

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.