Compare commits

..

2428 Commits
0.99.0 ... 1.20

Author SHA1 Message Date
thirtyninerealms-cloud
667ac6c6ee
Fix thread leak and graceful shutdown issue in NightConfigWatchThrottler
Fix thread leak and graceful shutdown issue in NightConfigWatchThrottler
2026-06-14 17:30:06 +08:00
thirtyninerealms-cloud
2d760eecbb
Fix thread leak and graceful shutdown issue in NightConfigWatchThrottler
Problem:
- FileSystemWatchService threads accumulate over time (observed 17+ threads)
- Threads cannot be interrupted during container shutdown due to unhandled parkNanos()
- Container fails to stop gracefully, requiring force kill

Root cause:
- LockSupport.parkNanos() called without interruption handling
- No shutdown detection mechanism
- Threads continue polling file system even when JVM is terminating

Changes:
1. Add AtomicBoolean shutdown flag to prevent new watch iterations during shutdown
2. Add proper thread interruption handling with graceful fallback to empty iterator
3. Register shutdown hook to set flag on JVM exit

Testing:
- Verified threads no longer accumulate after multiple config reloads
- Container now responds to SIGTERM and stops within 5 seconds
- CPU usage returns to normal after shutdown sequence
2026-06-14 17:24:20 +08:00
embeddedt
292a6aeab3
Fix optimize_surface_rules breaking mods that provide custom BiomeManagers 2026-06-11 20:01:31 -04:00
embeddedt
7fbfcf1a92
Remove error when missing_block_entities sees null BE
Blocks may legitimately not have a block entity for some states
2026-06-07 21:50:44 -04:00
embeddedt
1bcb28a1ad
Allow feature level requirement to be set at package level 2026-06-07 19:43:28 -04:00
embeddedt
d51b0f60a2
Fix an instance of vanilla leaking a BufferBuilder 2026-06-07 19:19:25 -04:00
embeddedt
ab9880159e
Add experimental KubeJS memory usage optimization 2026-06-06 21:17:34 -04:00
embeddedt
0f94634361
Remove the item stack reference thread 2026-06-06 21:04:09 -04:00
embeddedt
f1492cc829
Allow ZipPackIndex to work with any byte channel 2026-06-04 20:57:13 -04:00
embeddedt
0ecee529d7
Fix Forge calling getResource on every loot table unnecessarily 2026-06-03 18:05:56 -04:00
embeddedt
e9bfd96dd9
Fix Forge pack finder being injected multiple times into pack repository 2026-05-28 22:33:03 -04:00
embeddedt
fb9dcf77c6
Improve ZipPackIndex 2026-05-28 22:20:28 -04:00
embeddedt
33851c1cb6
Fix ImposterProtoChunk leaking live block entities to worldgen 2026-05-24 23:09:52 -04:00
embeddedt
494203ef5a
Fix potential crash during worldgen with release_protochunks enabled
The crash can occur if a protochunk next to a FULL chunk is dropped,
and then later re-requested. If it was not persisted to disk for any
reason, it starts regeneration from scratch. At FEATURES stage, it may
try to place blocks into the adjacent LevelChunk already in the world.

The fix is to prevent this situation from even happening by pinning
protochunks directly next to FULL chunks, and preventing them from
unloading.
2026-05-24 19:45:24 -04:00
embeddedt
74f76f7305
Improvements to ZipPackIndex
- Allow it to work on channels that don't support mapping
- Skip indexing folders that are not part of a pack type
2026-05-23 21:44:14 -04:00
embeddedt
62dbbea083
Optimize ZIP resource packs significantly 2026-05-23 21:28:19 -04:00
embeddedt
538c52bc2a
Run stronghold gen on dedicated thread pool 2026-05-23 17:00:08 -04:00
embeddedt
b62eb1845b
Avoid blocking chunk generation on concentric rings calculation where possible 2026-05-23 16:43:56 -04:00
embeddedt
7c45564979
Fix potential stronghold cache corruption if player exits world too quickly 2026-05-23 16:32:56 -04:00
embeddedt
f8d2425242
Improve accuracy of possible biomes check 2026-05-23 12:50:48 -04:00
embeddedt
50cedfc699
Fix stability level being impossible to override 2026-05-23 12:50:33 -04:00
embeddedt
f4f596ca0c
Fix mixin failing at runtime due to missing AT 2026-05-23 12:50:21 -04:00
embeddedt
85aab426c5
Fix mixin AP complaints 2026-05-23 12:01:33 -04:00
embeddedt
29ff5f152e
Log the state of each mixin at DEBUG level 2026-05-23 11:58:36 -04:00
embeddedt
8213a720a3
Optimize TerraBlender using extended surface biome context
Supersedes TerraBlenderFix
2026-05-23 11:56:45 -04:00
embeddedt
afe3e09a27
Add feature level system for mixins 2026-05-23 11:51:11 -04:00
embeddedt
ae20fa17c9
Fix random CMEs from NightConfigWatchThrottler 2026-05-18 10:05:23 -04:00
embeddedt
a6c03e9928
Rewrite biome condition optimizer inspired by 26.2 changes
Thanks to https://codeberg.org/ZenXArch for making me aware of the
simpler vanilla approach to achieve the same thing
2026-05-16 13:59:01 -04:00
embeddedt
864c751aea
Remove stream in hot path of capability provider construction 2026-05-15 21:14:26 -04:00
embeddedt
f931d5c442
Fix isOptionEnabled being invoked in hot path during capability provider creation
Fixes #664
2026-05-15 21:04:40 -04:00
embeddedt
55cec86e5f
Disable mixin.perf.faster_ingredients with Prefab installed
Prefab relies on the nullity of `Ingredient.itemStacks` matching
vanilla, which is not true with this option enabled

aa5386c78b/Shared/src/com/prefab/recipe/ConditionedShapedRecipe.java (L166)

Fixes #660
2026-05-07 21:48:04 -04:00
embeddedt
4ec8ef753a
Fix scripts not detecting 26.1 branch 2026-05-06 18:19:17 -04:00
embeddedt
3f22e23565
Further optimize OptimizedBiomeLookupSequenceRule 2026-05-06 18:18:14 -04:00
embeddedt
a73dd5ef6a
Update bug report template 2026-05-05 20:27:55 -04:00
embeddedt
653a477060
Fix crash when mods use null attributes
Fixes #658
2026-05-05 20:23:06 -04:00
embeddedt
44113d2536
Improve efficiency of surface rule optimizer when rules are complex 2026-05-05 19:41:28 -04:00
embeddedt
1165d3bdd1
Fix Crash Assistant treating a mixin audit as a crash 2026-04-29 18:47:02 -04:00
embeddedt
c73cdc49a4
Replace CapabilityProvider mixin with ASM transformer
Works around this Mixin bug: https://github.com/FabricMC/Mixin/issues/146

Since CapabilityProvider is the parent of many commonly targeted classes
like Level, ItemStack, etc., this breaks mods

Fixes #650
2026-04-28 18:59:09 -04:00
embeddedt
4e3ecf9b6d
Disable mixin.perf.release_protochunks when Moonrise is present
Fixes #652
2026-04-27 19:52:08 -04:00
embeddedt
a40363c1fb
Improve issue comment workflow [skip ci] 2026-04-22 19:42:45 -04:00
embeddedt
46dd5ecddd
Comment on issues when fix is released
Fixes #649
2026-04-22 19:36:59 -04:00
embeddedt
b765bcb51f
Improve compatibility with mods that inject into ModelBaker.bake
Fixes #646
2026-04-22 19:27:07 -04:00
Mustafa
26bd7116a1
Change log level from warn to debug for successfully created missing block entities
Closes #648
2026-04-22 19:05:18 -04:00
Mustafa
4d2f0da1fc
Reduce log level of mixin.perf.spam_thread_dump to info
Closes #647
2026-04-22 18:48:47 -04:00
embeddedt
c2f585da95
Fix rare crash from HandshakeHandler in 5.27.0+
The existing Forge logic can concurrently modify sentMessages from two threads,
since handleIndexedMessage runs on the Netty thread, while tickServer is on the
server thread. Ticking the handler faster made the race condition significantly
more likely to manifest.
2026-04-14 22:22:06 -04:00
Evoloxi
327c3cd9ff
Fall back to interfaces when resolving capability fields (#643) 2026-04-13 20:32:01 -04:00
embeddedt
c64ca2e54b
Fix potential crash with mods that inject custom surface building logic
Fixes #638
2026-04-12 16:36:44 -04:00
embeddedt
85955ebf75
Ensure integrated server is ticked at least once before player connects
Fixes #639
2026-04-12 16:02:54 -04:00
embeddedt
d749205427
Adjust dynamic_languages for better mod compatibility 2026-04-11 14:39:36 -04:00
embeddedt
438ceb1984
Move auditing to happen later in launch 2026-04-11 14:19:22 -04:00
embeddedt
5acb5115b9
Add mixin audit to CI 2026-04-11 14:14:53 -04:00
embeddedt
37dc9e60eb
Do not intern AttributeSuppliers after launch 2026-04-11 14:04:37 -04:00
embeddedt
c2191df359
Release 5.27.0 & enable continuous deployment 2026-04-10 21:07:34 -04:00
embeddedt
d08da1b3c8
Disable release_protochunks when C2ME is installed 2026-03-29 19:46:04 -04:00
embeddedt
36f425b8cd
Fix excessive recursion from mailbox 2026-03-28 22:07:59 -04:00
embeddedt
dc3c379049
Fix ChunkBiomeLookup leaking a worldgen region 2026-03-28 21:45:59 -04:00
embeddedt
4ff7d4c554
Allow a single low-priority worker thread when cause_lag_by_disabling_threads is enabled
On a system with few cores, we should still benefit from using one low-priority
background thread for worldgen, because it avoids the server thread stopping
to handle it itself. The thread will be blocked
from progressing while higher-priority work (e.g. rendering or server ticking)
is in progress.
2026-03-28 21:45:14 -04:00
embeddedt
db13f39b30
Implement dynamic language loading 2026-03-28 20:55:27 -04:00
embeddedt
5a9c49f8d4
Add option to reduce memory usage of entity models 2026-03-28 20:02:30 -04:00
embeddedt
8ee85f2c16
Remove duplicate list held by DebugLevelSource 2026-03-28 19:31:24 -04:00
embeddedt
2081b63b56
Fix looking up private static final Capability fields 2026-03-27 22:38:18 -04:00
embeddedt
94f1fbf4db
Rewrite AttachCapabilitiesEvent hoisting to not rely on phases 2026-03-27 21:18:38 -04:00
embeddedt
ab8a8068e0
Avoid synchronizing layer list in LivingEntityRenderer 2026-03-26 22:58:18 -04:00
embeddedt
79d2b28d5b
Fix Forge handshake taking extremely long time with many payloads 2026-03-19 21:25:37 -04:00
embeddedt
18dc488ab9
Avoid spinning in Minecraft.doWorldLoad 2026-03-19 20:36:07 -04:00
embeddedt
a9340b2642
Rewrite and improve mixin.perf.cache_strongholds 2026-03-19 20:11:11 -04:00
embeddedt
670e06816b
Reduce work done while waiting for singleplayer client to initiate connection 2026-03-16 22:15:44 -04:00
embeddedt
53349cbd1a
Remove skip_redundant_saves 2026-03-16 22:14:35 -04:00
embeddedt
1794c81b61
Optimize sequence rules that check many biome conditions in a row 2026-03-15 15:24:54 -04:00
embeddedt
dbe9acb3d8
Heavily optimize the BlockColumn impl used during surface rule evaluation 2026-03-14 22:05:36 -04:00
embeddedt
22915a91a1
Implement a significantly more optimized biome lookup for surface rules 2026-03-14 19:44:42 -04:00
embeddedt
1289897004
Add worldgen benchmarking harness 2026-03-14 18:46:32 -04:00
embeddedt
9692da12b4
Add idle timer to prevent chunks from suspending too quickly 2026-03-14 15:59:52 -04:00
embeddedt
e34a99b38c
Simplify chunk unload logic & fix events not being fired when INACCESSIBLE chunks are unloaded 2026-03-14 14:59:45 -04:00
embeddedt
f79eae8b83
Make integrated server treat game as paused while singleplayer client is still loading 2026-03-14 10:44:04 -04:00
embeddedt
38288d5e6a
Automatically free contents of ChunkHolders only used for worldgen when generation finishes 2026-03-13 22:26:51 -04:00
embeddedt
2050516bf1
Do not cache supported glyphs in lazy provider 2026-03-13 19:53:33 -04:00
embeddedt
02f486ebf4
Avoid loading multiple copies of a lazy glyph provider 2026-03-13 19:36:15 -04:00
embeddedt
9edce9ad91
Dynamically load/unload Unihex font data 2026-03-06 20:52:26 -05:00
embeddedt
ac8d93d5b9
Ensure exceptions thrown in chunk load events are not dropped 2026-03-06 09:00:28 -05:00
embeddedt
bee4536c1a
Tweak full chunk promotion to reduce opportunities for deadlocks 2026-03-05 21:09:33 -05:00
embeddedt
da2206168b
Port AP to Java 17 2026-03-04 19:18:01 -05:00
embeddedt
17f930ea6f
WIP chunk saving optimization 2026-03-04 18:41:28 -05:00
embeddedt
f23348c6cb
Clear unneeded ObjectHolderRefs 2026-03-01 19:28:52 -05:00
embeddedt
21cbcb0e04
Strip signatures from jar manifests at startup to save memory 2026-03-01 17:52:13 -05:00
embeddedt
925c7526ee
Reduce memory usage of ImposterProtoChunks 2026-03-01 15:46:52 -05:00
embeddedt
30e3deb8e2
Avoid unnecessary chunkloads when remove_spawn_chunks is enabled 2026-03-01 15:18:13 -05:00
embeddedt
ee34dcf96e
Drastically simplify and document chunk system memory usage patch 2026-02-28 16:42:42 -05:00
embeddedt
49d800ff27
Avoid calling LazyOptional.isPresent() if possible 2026-02-27 22:19:04 -05:00
embeddedt
15f30b532c
Reduce generated class size slightly 2026-02-27 21:30:35 -05:00
embeddedt
df06010846
Fix superclass capability types being ignored sometimes 2026-02-27 20:53:40 -05:00
embeddedt
696b344ef5
Fix missed detection of certain cap equality checks 2026-02-27 20:35:58 -05:00
embeddedt
e63d99763e
Avoid initializing lazy capability providers for compatibility checks where possible 2026-02-27 19:29:16 -05:00
embeddedt
60850610f9
Group capability providers of known types together when possible 2026-02-27 19:11:24 -05:00
embeddedt
e16179b797
Emit more debug info to the generated dispatcher classes 2026-02-27 19:08:06 -05:00
embeddedt
784b914a43
Optimize runs of ICapabilityProvider calls into hash lookups 2026-02-26 22:26:57 -05:00
embeddedt
b9933b1158
Add bytecode analysis to filter ICapabilityProvider impls where possible
Currently disabled by default till more testing is completed
2026-02-26 21:45:31 -05:00
embeddedt
878b3798f3
Detect mods causing CMEs with the client resource reload listener list
Related: #512
2026-02-05 21:10:39 -05:00
embeddedt
bc0e9a09fc
Prevent model locations added in RegisterAdditional from being early baked 2026-02-02 21:29:14 -05:00
embeddedt
8c34c0de50
Dump stats on permanently loaded baked models to debug log 2026-02-02 20:50:21 -05:00
embeddedt
5a93bc6109
Use identityHashCode for attribute 2026-01-25 21:31:06 -05:00
embeddedt
8125da7882
Avoid propagating unbaked model load errors to higher-level code
Related: #625
2026-01-25 21:28:23 -05:00
embeddedt
d699187006
Fix AttachCapabilitiesEvent dispatch being very slow
EventBus strikes again...
2026-01-25 20:38:18 -05:00
embeddedt
cff29149db
Intern map keys in BlockStateData 2026-01-25 19:41:29 -05:00
embeddedt
3926f27d33
Optimize memory usage of entity attribute templates 2026-01-25 19:27:27 -05:00
embeddedt
9bc5f06a19
Ensure correct order of properties in generated ModelResourceLocation variant strings
Related: https://github.com/malte0811/FerriteCore/issues/219
2026-01-24 10:41:23 -05:00
embeddedt
a70f76a34d
Document the reason for lack of optimization 2026-01-23 20:20:48 -05:00
embeddedt
4dcdf09a01
Do not convert ModFileScanData annotation values to immutable lists
Related: #627
2026-01-23 20:19:28 -05:00
embeddedt
f26d35070e
Remove changelog step from release workflow [skip ci] 2026-01-22 20:01:26 -05:00
embeddedt
a04266df54
Fix bugs in release process 2026-01-22 19:47:26 -05:00
embeddedt
2ec6a6afbc
Fix error running publishMods 2026-01-22 19:39:49 -05:00
embeddedt
49f5b527db
Add JVM argument to help prevent mass Spark profile uploads 2026-01-22 19:03:01 -05:00
embeddedt
00287612de
Reimplement publish task 2026-01-17 21:20:21 -05:00
embeddedt
4b18cc2cc6
Fix crash when user home/config folders are inaccessible 2026-01-09 21:05:49 -05:00
embeddedt
b2ed5b9341
Adjust mixin for CIT Reforged compatibility
Related: https://github.com/embeddedt/ModernFix/issues/624
2026-01-09 21:05:06 -05:00
embeddedt
a30dd08cd1
Optimize memory usage of ModFileScanData 2026-01-06 21:58:21 -05:00
embeddedt
7420a7c7ab
Dispatch getCapability calls using specialized ASM loop per provider types
Idea suggested by @eigenraven
2026-01-01 13:09:17 -05:00
embeddedt
3f9148fa62
Update to Gradle 9.2.1 2025-12-27 18:27:09 -05:00
embeddedt
8cc41fa222
Delete old Gradle files and resolve deprecation warning 2025-12-27 18:26:15 -05:00
embeddedt
f06fb8c32e
Fix several issues running production jar 2025-12-26 18:29:35 -05:00
embeddedt
6ee15122f9
Add jar copying tasks 2025-12-26 18:20:35 -05:00
embeddedt
c9843e08bd
Remove Loom cache [skip ci] 2025-12-26 18:16:41 -05:00
embeddedt
7b47c39e6b
Update scripts to use root folder 2025-12-26 18:15:21 -05:00
embeddedt
b26ab375b5
Merge common & forge projects, replace Arch Loom with MDG 2025-12-26 18:13:42 -05:00
embeddedt
9c4da7fa68
Remove Fabric subproject 2025-12-26 16:26:58 -05:00
embeddedt
d64a1c760b
Fix compile errors 2025-12-26 16:16:15 -05:00
embeddedt
555213714f
Delete more old code 2025-12-26 16:10:07 -05:00
embeddedt
7f27141a16
Remove more old code 2025-12-26 15:53:26 -05:00
embeddedt
a8227a964d
Remove deduplicate_climate_parameters, not worth the overhead
Also remove some other misc classes
2025-12-26 15:49:44 -05:00
embeddedt
a7a9aac23a
Begin cleaning up a large volume of code 2025-12-26 15:37:32 -05:00
embeddedt
1176cc98e3
Compact NBT used for Flattening world upgrades 2025-12-26 14:02:42 -05:00
embeddedt
a7622f58ae
Run formatter 2025-12-07 20:36:07 -05:00
embeddedt
67814db6ad
Mitigate dynres cache thrashing for blocks with more than 10,000 states
The previous implementation kept trying to load the models for all
states at once in this scenario, which would cause thrashing as
most of the loads would be thrown out. The new implementation
limits how many models it will load at a time, but still tries
to batch as much as possible
2025-12-07 20:26:42 -05:00
embeddedt
8959c2ff91
Remove dynamic_sounds
This option is unlikely to offer substantial memory savings,
especially when considering that sounds are located off-heap
(meaning the OS should be able to effectively swap out the
unreferenced sound pages to disk). It does not seem worth
the effort to hack this into a game not designed for sounds
to unload at runtime.
2025-11-08 11:49:58 -05:00
embeddedt
a6eb99d23c
Spotless 2025-11-01 20:22:53 -04:00
embeddedt
fd46baae21
Backport model compat fix from 1.21
ff6b687d5a

Related: #606
2025-11-01 20:18:17 -04:00
embeddedt
273bab7856
Rewrite dynamic_sounds to consider sound duration when caching
Related: #594
2025-11-01 19:52:56 -04:00
embeddedt
8133198cc2
Enable worldgen_allocation by default 2025-08-22 20:25:27 -04:00
embeddedt
25976f3b87
Disable LazyYCondition logic in situations where it has no effect
This saves roughly 10% of time in surface rule evaluation in some
tests.

Closes #585

Co-authored-by: Voidsong Dragonfly <voidsongdragonfly@pm.me>
2025-08-22 20:25:12 -04:00
embeddedt
f71277eb64
Memoize VanillaRegistres.createLookup 2025-08-09 20:44:08 -04:00
embeddedt
b30b319214
Deduplicate ResourcefulLib Highlight objects 2025-08-09 20:43:49 -04:00
embeddedt
e411f11c0c
Implement Forge ingredient invalidation correctly 2025-08-02 15:29:41 -04:00
embeddedt
e30a7fccf2
Add global properties file
Not populated by default. User must create
`global/modernfix-global-mixins.properties` in the standard global
.minecraft folder for their OS
2025-08-01 18:59:13 -04:00
embeddedt
12a0414f61
Do not override user-specified max.bg.threads 2025-08-01 18:41:55 -04:00
embeddedt
44322a7d07
Tweak narrator mixin 2025-08-01 18:40:40 -04:00
embeddedt
8d4a7c3374
Mark Spark worker as daemon thread 2025-08-01 18:34:53 -04:00
DerCommander323
29c1a479a4
Add mixin.feature.suppress_narrator_stacktrace to prevent some log spam on Linux (#590) 2025-08-01 18:29:20 -04:00
embeddedt
ee6489fb69
Make mixin.perf.thread_priorities limit background thread count as well 2025-07-27 14:55:34 -04:00
embeddedt
87c977a3e6
Patch concurrency issue in ForgeRegistryTagManager 2025-07-16 21:50:00 -04:00
embeddedt
54e55e7534
Don't specify ordering for JEI dependency 2025-07-13 19:15:21 -04:00
embeddedt
65ab37b819
Fix reobfuscation issue 2025-07-13 14:31:58 -04:00
embeddedt
873e3bd676
Fix race condition when mods create tags on different threads 2025-07-12 22:22:58 -04:00
embeddedt
6b37051980
Fix faster_ingredients bypassing defensive copy of ItemValue
Kudos to @nutant233 for noticing this
2025-07-04 18:42:39 -04:00
embeddedt
cf5c81f7e2
Hotfix: disable ingredient_item_deduplication by default 2025-07-03 08:08:03 -04:00
embeddedt
9d280f51df
Remove tterrag maven 2025-07-01 20:48:02 -04:00
embeddedt
f26ed86973
Disable smart ingredient sync with CraftTweaker installed
Related: #570
2025-06-16 19:49:46 -04:00
embeddedt
38f1370d59
Do not register smart ingredient sync channel if option is off
Related: #570
2025-06-16 19:21:25 -04:00
embeddedt
213e0ceb9a
Fix incorrect kick logic 2025-06-05 22:07:09 -04:00
embeddedt
7688fc2b16
Implement Java 17-compatible DFU cache blaster 2025-06-05 21:35:21 -04:00
embeddedt
20b3d8bffa
Do not apply optimization to subclasses of ItemValue 2025-06-05 18:08:19 -04:00
embeddedt
2e0ec6ae9e
Add ingredient item value ItemStack deduplication
Inspired by AllTheLeaks, but done slightly differently to hopefully
be compatible with more mods
2025-06-04 22:53:28 -04:00
embeddedt
a170f072ff
Invalidate memoization for non-category creative tabs when categories are rebuilt 2025-06-02 19:15:20 -04:00
embeddedt
e7542afd1c
Disable mixin.perf.faster_ingredients with VMP installed
Related: #565
2025-06-01 15:24:29 -04:00
embeddedt
71b444288b
Remove nbt_memory_usage
This will be replaced by more targeted optimizations towards the
most common allocators of duplicate keys. The current implementation
forces every key to be interned which may be redundant in many cases
(e.g. when constants are given to the compound tag)
2025-05-30 22:20:51 -04:00
embeddedt
94271b866b
Add world join profiling 2025-05-30 21:35:52 -04:00
embeddedt
6e591f5ace
Add more sysprops 2025-05-30 21:23:51 -04:00
embeddedt
4802988bbb
Add sysprop to allow using async profiler for launch profiling 2025-05-30 21:18:22 -04:00
embeddedt
292b80cf37
Fix missing bitmask when compressing smaller datums into long 2025-05-19 15:19:46 -04:00
embeddedt
5048e74c79
Do not bypass Ingredient.TagValue#getItems during server resource reload
This breaks KubeJS/CraftTweaker's workarounds for tags not being
available during RecipeManager#apply (even though they become available
right after)

Related: #555
2025-05-19 14:55:50 -04:00
embeddedt
c3086e5249
Remove defensive copy of model location collection in replaceAll
The defensive copy shouldn't be necessary, as the set is effectively
immutable anyways
2025-05-19 12:37:32 -04:00
embeddedt
bb658319cb
Try to use a more optimal Set implementation for filtering 2025-05-19 12:17:50 -04:00
embeddedt
14f1552ad7
Use Guava immutable list to avoid extra internal copying 2025-05-19 11:59:44 -04:00
embeddedt
61c8cfdca6
Slight tweaks to ModelLocationBuilder 2025-05-19 11:30:13 -04:00
embeddedt
af526b9113
Include ModernFix itself in time calculations for dynamic resources 2025-05-19 11:02:07 -04:00
embeddedt
6df33005a7
Fix copy-and-paste mistake in compact unihex logic 2025-05-19 10:24:13 -04:00
embeddedt
e9cb602ab7
Add some universe filters 2025-05-18 22:42:56 -04:00
embeddedt
a13587e139
Fix presizing of model location set & use more efficient string generation logic 2025-05-18 21:55:51 -04:00
embeddedt
6979b56d8c
Merge branch 'unihex' into 1.20 2025-05-18 21:06:09 -04:00
embeddedt
3a2edf7ddd
Attempt to reduce overhead of splitting same path string many times 2025-05-18 21:05:12 -04:00
embeddedt
a643170426
Implement more accurate fix for MC-183518
The game now sleeps precisely till the next tick, rather than still
waking up periodically

Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com>
2025-05-18 19:10:11 -04:00
embeddedt
4964cccff9
Ensure files in assets/ are not counted as namespaces 2025-05-18 15:36:12 -04:00
embeddedt
82535da861
Replace mixin.feature.disable_unihex_font with mixin.perf.compress_unihex_font
The font still takes up some memory, but less than before
2025-05-15 22:11:58 -04:00
embeddedt
f70fb212f7
Update KubeJS maven to fix build failure 2025-05-15 21:39:43 -04:00
embeddedt
588b56530e
Support clearing model registry in dev for testing purposes 2025-05-15 20:22:29 -04:00
embeddedt
3ad4e2478e
Optimize MultiVariant.resolveParents 2025-05-15 20:21:34 -04:00
embeddedt
c118675369
Fix concurrency issues in vanilla RegistryOps.memoizeLookup 2025-05-15 18:53:47 -04:00
embeddedt
8b0622ff5c
Log when model universe is restricted 2025-05-14 22:19:10 -04:00
embeddedt
900e5786b6
Pre-size the top level model location set to reduce rehashing 2025-05-09 22:17:36 -04:00
embeddedt
2535174e00
Implement advanced caching of ingredient item stacks using soft references
This gives the GC control over when to evict the cache, which combines
the benefits of removing the cache entirely with the speed of keeping it
2025-05-03 14:34:48 -04:00
embeddedt
7398b48345
Patch CoFH Core to not rely on Ingredient.itemStacks 2025-05-02 17:27:56 -04:00
embeddedt
eed320b055
Optimize some methods in Ingredient and remove itemStacks caching 2025-05-01 19:10:18 -04:00
embeddedt
01d2582c44
Sync tag ingredients directly if ModernFix is installed on both sides 2025-05-01 17:14:19 -04:00
embeddedt
536eb03b50
Trigger classloading of Items when deferring blockstate cache rebuild 2025-05-01 15:21:08 -04:00
embeddedt
1b37c9da66
Remove obsolete OBJLoader patch 2025-04-29 18:33:50 -04:00
embeddedt
e253833b68
Use CHM's built-in set instead of newSetFromMap 2025-04-29 18:26:20 -04:00
embeddedt
ae729bcd15
Enable use of FML's unused TracingPrintStream for tracking mod messages on System.out
We implement this ourselves because we need it on 1.20.1 anyway,
it will eventually be implemented upstream in NeoForge, at
which point this feature will be removed:
https://github.com/neoforged/FancyModLoader/issues/277
2025-04-29 11:18:21 -04:00
embeddedt
9be6134073
Remove obsolete resource pack code 2025-04-28 18:55:23 -04:00
embeddedt
59e3b83d74
Default to showing the whole model registry to mods
This should fix many silent incompatibilities that existed with the
original opt-in approach. To my knowledge, there are no remaining
popular mods on 1.20 that forcefully load all models in this event
(by iterating over entrySet and calling getValue unconditionally)
so doing this should be safe. Additional logging is also added
to provide quick insight into what mod(s) have the slowest handling
of this event.
2025-04-28 10:59:49 -04:00
embeddedt
4bdddf1051
Attempt to improve parity/reliability of dynamic_entity_renderers 2025-04-27 20:29:21 -04:00
embeddedt
211e404687
Implement a very primitive datapack function profiler 2025-04-27 19:38:23 -04:00
embeddedt
4cde23f4fe
Rewrite resource pack caching to use a tree 2025-04-27 18:35:28 -04:00
embeddedt
dbb6e4713d
Improve usability of -Dmodernfix.debugReloaders 2025-04-27 18:35:14 -04:00
embeddedt
8c2c33093b
Build creative mode tab search tree on first use
This avoids holding search trees for many creative tabs that will
likely never be searched during gameplay.
2025-04-26 16:15:24 -04:00
embeddedt
63aeef1ba0
Add back datapack reload time tracking during world creation 2025-04-26 12:32:50 -04:00
embeddedt
51c4f3eae8
Use smarter iteration order in model bake event registry
This heavily improves the rate of cache hits when mods are baking
many variants of the same model via iteration over the keys,
as now all the variants will be obtained at once rather than
being retrieved randomly.

Cable Tiers used to take 8 seconds in the event before this change
on a Ryzen 7700X, and is now nearly instant.
2025-04-26 12:06:12 -04:00
embeddedt
455b56749c
Document many mixin options 2025-04-25 21:29:46 -04:00
embeddedt
673851ffbd
Check before casting JEI runtime 2025-04-06 14:21:55 -04:00
embeddedt
20be8d0da3
Fix obfuscation error 2025-04-02 18:58:39 -04:00
embeddedt
967b0c1982
Prevent Forge's crash report analyser from complaining about ModernFix 2025-04-02 18:52:37 -04:00
embeddedt
fcea407708
Memoize creative tab content building per-tab
This should greatly reduce lag spikes experienced when opening
the creative inventory with a mod like EMI installed, as the creative
tabs will not be rebuilt a second time
2025-03-06 19:53:33 -05:00
embeddedt
5168eb63aa
Fix BuildCraft pipes
Related: #516
2025-02-15 15:52:19 -05:00
embeddedt
4a8e0487bc
Prevent crash when server sends invalid palette
Related: #509
2025-01-20 09:35:13 -05:00
embeddedt
e7f86f8687
Modernize toolchain
Now requires Fabric Loader 0.16.10 even on Minecraft 1.20.1
2025-01-19 19:26:55 -05:00
embeddedt
f97766019a
Prevent sculk events in addPassenger from deadlocking the game during worldgen
This seems to be a vanilla bug when spawning entities that ride other entities

Related: #510
2025-01-19 19:08:14 -05:00
embeddedt
6aae0f952c
Add debug feature to catch illegal block entity map mutation 2025-01-01 11:05:05 -05:00
embeddedt
b72959f257
Block telemetry by default
Related: #488
2024-12-26 15:17:54 -05:00
embeddedt
64a427fa62
Add LDLib connected textures integration 2024-12-26 14:51:20 -05:00
embeddedt
32a8800344
Premultiply chunk offset for incredibly small performance gain 2024-12-25 22:27:56 -05:00
embeddedt
1c789111e8
"Fix" Hypixel's disappearing chests problem on modern clients
We really should not need to do this. Hypixel, *please* fix your
protocol translation plugin.
2024-12-25 22:13:52 -05:00
embeddedt
0b8eddbf25
Replace RS integration with generic model registry emulation
Fixes patterns not rendering

Related: #499
2024-12-25 15:45:25 -05:00
embeddedt
631b3eddfb
Detect Redirector and show warnings 2024-12-23 13:56:54 -05:00
embeddedt
98e6af87c1
Protect DynamicBakedModelProvider against null keys
Related: #495
2024-12-16 17:01:46 -05:00
embeddedt
639f0e2c1a
Force-override updateY to be public
Related: #494
2024-12-16 09:56:38 -05:00
embeddedt
ba6d0d20fc
Stop looking for legacy cache file names
Related: #485
2024-12-12 19:29:24 -05:00
embeddedt
14a89f94a6
Backport CTM mixin from 1.21
Related: #487
2024-12-12 19:28:01 -05:00
embeddedt
8307564336
Use SSH for propagators 2024-11-29 16:42:36 -05:00
embeddedt
fffb1031f7
Propagate via SSH 2024-11-29 16:41:58 -05:00
embeddedt
0bda3c9f43
Fix setup-gradle 2024-11-29 16:40:29 -05:00
embeddedt
0f3bfd894e
Fix Furniture Mod hedges rendering in fast mode with dynres on 2024-11-02 13:38:31 -04:00
embeddedt
054d36baa0
WIP ingredient work 2024-11-02 13:38:20 -04:00
embeddedt
8e1270dcdc
Skip filtering blockstates if client is not in world 2024-09-22 13:47:35 -04:00
embeddedt
fec7eb66ea
Avoid error from mods that replace chunk system 2024-09-22 13:46:09 -04:00
embeddedt
7c550a1ce4
Fix fluidlogged incompatibility 2024-08-27 17:48:52 -04:00
embeddedt
333147cfd5
Silence mixin warning with Moonrise 2024-08-23 20:52:21 -04:00
embeddedt
d25781f36c
Implement more methods on FakeStateMap 2024-08-23 20:50:28 -04:00
embeddedt
75ff154eca
Mark the section compile optimization as not required for better compat 2024-08-10 19:18:27 -04:00
embeddedt
49464451dd
Make state_definition_construct degrade gracefully if map is used like a hashmap
Related: #452
2024-08-09 18:02:39 -04:00
embeddedt
c0eaf29cb5
Remove mod file scan data deduplicator
This has no effect on newer FML versions since fields are now records
2024-08-06 20:27:25 -04:00
embeddedt
87d1aad3d1
Backport unbaked model caching from 1.21 2024-08-05 09:48:10 -04:00
embeddedt
6f4212ebc8
Unfreeze block registry ourselves in tests 2024-07-27 12:51:32 -04:00
embeddedt
6a365be734
Disable FAPI in dev 2024-07-27 12:44:02 -04:00
embeddedt
2e52db6e93
Apply some simple optimizations for vanilla section meshing 2024-07-27 12:43:48 -04:00
embeddedt
ece2897c37
Loom 1.7 + Gradle 8.8 2024-07-24 20:33:01 -04:00
embeddedt
4ee8c41abd
Allow debugReloader option to also work with datapack reloads
Related: #397
2024-07-24 20:14:41 -04:00
embeddedt
66ef30449a
Collect JEI ingredients to list first to avoid concurrency issues 2024-07-17 18:45:53 -04:00
embeddedt
edddba6991
Fix searching in latest JEI 2024-07-16 18:58:21 -04:00
embeddedt
bc7aa5539c
Do not spin the watchdog thread while server is booting 2024-07-07 20:52:06 -04:00
embeddedt
7348737878
Emulate entrySet on dynamic resources model registry
Related: #429
2024-07-07 11:26:06 -04:00
embeddedt
fd42c5b129
Disable classload hack as it causes the same issue it tried to solve
Related: #431
2024-07-07 09:13:57 -04:00
embeddedt
3bad8f5934
Avoid "timeout is negative" exception in watchdog 2024-06-29 13:46:03 -04:00
embeddedt
72fc1583be
Disable worldgen optimizations for patch release 2024-06-13 18:24:25 -04:00
embeddedt
aac4334b37
Re-enable mixin AP, static remapping is broken right now 2024-06-13 18:19:04 -04:00
embeddedt
6f4098a2d9
re-enable runtime FAPI 2024-06-13 17:24:58 -04:00
embeddedt
b50a7587da
Spotless 2024-06-10 21:58:59 -04:00
embeddedt
f7f871ffc1
Spotless 2024-06-10 21:43:16 -04:00
embeddedt
2193aa11a4
Add some relatively safe allocation optimizations for worldgen 2024-06-10 20:18:11 -04:00
embeddedt
1ec9aad47f
Spotless 2024-06-09 22:03:00 -04:00
embeddedt
fb51a31dd2
Add option to disable thread pool 2024-06-09 21:57:15 -04:00
embeddedt
ef528a4f3a
Avoid thread-local map by storing model reference on BlockState object directly 2024-06-09 20:40:21 -04:00
embeddedt
792f9790ea
Improve F3+T speed when in world 2024-06-08 22:12:30 -04:00
dirtTW
661c6c9ccf
Update Traditional Chinese translation (#413) 2024-06-07 17:29:07 -04:00
embeddedt
809c622ad4
Spotless 2024-06-05 20:14:25 -04:00
embeddedt
a51e740040
Move to Java 21 for building the mod 2024-06-05 20:11:13 -04:00
embeddedt
c7befd1913
Switch to TR mixin remapping, make our custom AP incremental 2024-06-05 19:43:09 -04:00
embeddedt
03e758a037
Fix launch crash on Forge 47.3.1 2024-06-04 19:39:52 -04:00
embeddedt
10f1365905
Merge 1.19.2 into 1.20 2024-06-01 13:38:17 -04:00
embeddedt
dfb9378297
Merge 1.18 into 1.19.2 2024-06-01 13:38:16 -04:00
embeddedt
94c848b0de
Merge 1.16 into 1.18 2024-06-01 13:38:15 -04:00
embeddedt
5d7813bf3e
Fix watchdog crash on server start 2024-06-01 13:37:50 -04:00
embeddedt
3a190a56b4
Add optional fix for modern ender dragon having broken movement compared to 1.13 2024-06-01 13:33:21 -04:00
embeddedt
b088fee0e8
Merge 1.19.2 into 1.20 2024-05-30 19:06:40 -04:00
embeddedt
e9ffa69412
Merge 1.18 into 1.19.2 2024-05-30 19:06:39 -04:00
embeddedt
5a7ba9ffea
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-05-30 19:06:33 -04:00
embeddedt
6bfe079175
Attempt to track server tick times more accurately 2024-05-29 18:53:52 -04:00
embeddedt
def4c05dbc
Merge 1.19.2 into 1.20 2024-05-29 16:04:37 -04:00
embeddedt
309870517e
Merge 1.18 into 1.19.2 2024-05-29 16:04:36 -04:00
embeddedt
0d462268e9
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-05-29 16:04:27 -04:00
embeddedt
1728de0f16
Fix CME in BiomeDictionary.Type
Thanks @Asek3 for noticing this
2024-05-26 15:58:37 -04:00
embeddedt
06878c69e4
Disable biome container compression when WorldEdit is installed 2024-05-19 15:16:49 -04:00
embeddedt
831db874e4
Merge 1.19.2 into 1.20 2024-05-12 16:59:13 -04:00
embeddedt
fdac36df9f
Merge 1.18 into 1.19.2 2024-05-12 16:59:12 -04:00
embeddedt
ad9ce1265e
Add a force option to enable blast_search_trees even if no search mod is installed 2024-05-12 16:59:06 -04:00
embeddedt
16f637329f
Merge 1.19.2 into 1.20 2024-05-11 22:15:25 -04:00
embeddedt
d9a44ee061
Merge 1.18 into 1.19.2 2024-05-11 22:15:24 -04:00
embeddedt
1ce76470c2
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-05-11 22:14:45 -04:00
embeddedt
4e3897636d
Disable buffer builder leak fix if Wither Storm Mod is installed
Related: #405
2024-05-11 22:14:26 -04:00
embeddedt
965d105542
Trigger chunk load when remove_spawn_chunks is enabled and end portal teleportation occurs
Related: #404
2024-05-11 22:09:18 -04:00
embeddedt
90848b8972
Update optimization to 1.20 2024-04-30 18:04:30 -04:00
embeddedt
473c74e63b
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-04-30 17:12:34 -04:00
embeddedt
2e8c003572
Improve speed of searching for structures 2024-04-30 17:12:14 -04:00
Santiago Hernandez
60707e43b9
Add es_mx.json translation (#391) 2024-04-29 15:02:24 -04:00
embeddedt
641649c1aa
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-04-22 21:25:51 -04:00
embeddedt
8b2fa7e554
Merge 1.16 into 1.18 2024-04-21 21:26:39 -04:00
embeddedt
67e3a863cc
Merge 1.18 into 1.19.2 2024-04-21 21:26:39 -04:00
embeddedt
2915a88465
Use vanilla stitcher for simple atlases
Fixes some minor mod compatibility issues
2024-04-21 21:26:13 -04:00
embeddedt
f8424a9fac
Merge 1.19.2 into 1.20 2024-04-15 21:22:18 -04:00
embeddedt
237239d466
Merge 1.18 into 1.19.2 2024-04-15 21:22:17 -04:00
embeddedt
2f4836b045
Support new REI version 2024-04-15 21:22:06 -04:00
embeddedt
c15b95e2be
Fix mixin.perf.resourcepacks overwriting Fusion patches
Related: #392
2024-04-13 22:26:43 -04:00
embeddedt
97e2a318f3
Update Loom & Gradle 2024-04-13 15:06:53 -04:00
embeddedt
d7f2e90984
Merge 1.19.2 into 1.20 2024-04-13 13:11:21 -04:00
embeddedt
dcc0ed27d8
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2024-04-10 23:14:22 -04:00
embeddedt
debfbdc017
Fix OptiFine resources not being loaded with mixin.perf.resourcepacks
This will impact launch performance, but that is unavoidable if we
want the OF patch to apply. Using a Sodium port is recommended instead.

Related: #41, #45
2024-04-10 23:14:01 -04:00
embeddedt
dd45519d21
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-04-09 19:20:30 -04:00
embeddedt
d36ac86b2a
Merge 1.18 into 1.19.2 2024-04-09 19:19:24 -04:00
embeddedt
ecf3417b45
Merge 1.16 into 1.18 2024-04-09 19:19:23 -04:00
embeddedt
32b0216b19
Work around Carpet crash when remove_spawn_chunks is enabled
Related: #390
2024-04-09 19:13:35 -04:00
ZZZank
9f521ed308
Update zh_cn localizations for mixin options (#387) 2024-04-03 10:41:16 -04:00
embeddedt
ab1da68da2
Document all new mixin options 2024-03-31 16:43:12 -04:00
embeddedt
ec189b55a2
Fix concurrency bugs in Mantle models
Backports eb111d2083
Related: https://github.com/embeddedt/embeddium/issues/251
2024-03-31 16:34:46 -04:00
embeddedt
8873a055bc
Fix https://github.com/thebrightspark/AsyncLocator/issues/12 for 1.16 2024-03-31 16:08:39 -04:00
embeddedt
53e5eb6748
Merge 1.19.2 into 1.20 2024-03-31 16:06:03 -04:00
embeddedt
851febf61d
Merge 1.18 into 1.19.2 2024-03-31 16:06:02 -04:00
embeddedt
dac091cea4
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-03-31 16:03:42 -04:00
embeddedt
e1059e15e7
Convert repository declarations to exclusive content 2024-03-31 15:58:34 -04:00
embeddedt
efc764020a
Merge 1.19.2 into 1.20 2024-03-31 09:27:10 -04:00
embeddedt
9c7b482a20
Merge 1.18 into 1.19.2 2024-03-31 09:27:10 -04:00
embeddedt
8f6c76e93a
Merge 1.16 into 1.18 2024-03-31 09:27:09 -04:00
embeddedt
eddb7fa166
Use low-priority overwrite so other mixins can also apply 2024-03-31 09:26:38 -04:00
embeddedt
0e48559109
Merge 1.19.2 into 1.20 2024-03-30 18:12:29 -04:00
embeddedt
34b9f8d755
Merge 1.18 into 1.19.2 2024-03-30 18:12:28 -04:00
embeddedt
8cca316fb5
Optimize ChunkAccess.getAllReferences directly 2024-03-30 18:10:20 -04:00
embeddedt
4ddac48f1e
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-03-30 17:42:09 -04:00
embeddedt
e9c266cd16
Properly port recipe book tree to 1.19.2 2024-03-30 17:39:36 -04:00
embeddedt
b0ed60c2f0
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-03-30 17:37:23 -04:00
embeddedt
099c62672b
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2024-03-30 17:36:18 -04:00
embeddedt
6c82d448f7
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-03-30 17:35:57 -04:00
embeddedt
469b4b7093
Use separate backing search tree for recipe book 2024-03-30 17:35:06 -04:00
embeddedt
033cfd34e5
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2024-03-30 17:34:32 -04:00
embeddedt
c3eeb1e90f
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-03-30 17:31:55 -04:00
embeddedt
db105905f7
Implement a fallback search tree for the recipe book 2024-03-30 17:27:37 -04:00
embeddedt
85aa352215
Merge 1.19.2 into 1.20 2024-03-30 15:22:45 -04:00
embeddedt
aa6b7fad1f
Merge 1.18 into 1.19.2 2024-03-30 15:22:44 -04:00
embeddedt
43dbba1152
Merge 1.16 into 1.18 2024-03-30 15:22:43 -04:00
embeddedt
9e3e732b43
Fix MC-183518 2024-03-30 15:14:44 -04:00
embeddedt
8dac16bfc4
Merge 1.19.2 into 1.20 2024-03-29 10:49:42 -04:00
embeddedt
72ba7d37e0
Merge 1.18 into 1.19.2 2024-03-29 10:49:42 -04:00
embeddedt
183429867a
Merge 1.16 into 1.18 2024-03-29 10:49:41 -04:00
embeddedt
226e4a373b
Reduce chances of CME when iterating class info cache 2024-03-29 10:49:36 -04:00
embeddedt
ddffe93f1a
Stop clearing fields/methods on mixin classes
This seems to break generating the needed bridge access$xxx methods
for inner classes in mixins.

Example mixin that breaks: d5b3c910ac/common/src/main/java/com/railwayteam/railways/mixin/client/MixinStationScreen.java
2024-03-29 10:49:36 -04:00
embeddedt
8a247bd8aa
Merge 1.19.2 into 1.20 2024-03-27 12:15:12 -04:00
embeddedt
a198bfaecd
Merge 1.18 into 1.19.2 2024-03-27 12:15:11 -04:00
embeddedt
c413a70c56
Merge 1.16 into 1.18 2024-03-27 12:15:09 -04:00
embeddedt
66abdcd9a7
Null-check config keybind 2024-03-27 12:14:58 -04:00
Marlester
1b52387cfa
Create de_de.json (#385) 2024-03-27 10:20:35 -04:00
embeddedt
e5e8e6d9b5
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-03-26 10:04:59 -04:00
embeddedt
f7b4c786d7
Merge 1.18 into 1.19.2 2024-03-26 10:02:09 -04:00
embeddedt
3bf8255581
Merge 1.16 into 1.18 2024-03-26 10:02:08 -04:00
embeddedt
7e9ace3fc6
Fix optimized stitcher ignoring maximum atlas size 2024-03-26 10:02:04 -04:00
embeddedt
fe3de55409
Merge 1.19.2 into 1.20 2024-03-22 14:11:03 -04:00
embeddedt
deb81ec6cd
Merge 1.18 into 1.19.2 2024-03-22 14:10:50 -04:00
embeddedt
b85f1341c1
Merge 1.16 into 1.18 2024-03-22 14:10:49 -04:00
embeddedt
d2680cf29d
Mark mixin as client-only 2024-03-22 14:10:42 -04:00
embeddedt
ab077bc48f
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-03-22 14:06:24 -04:00
embeddedt
884bdb0fe2
Merge 1.18 into 1.19.2 2024-03-22 14:05:15 -04:00
embeddedt
f63d82ce9b
Merge 1.16 into 1.18 2024-03-22 14:05:13 -04:00
embeddedt
4af1e27a89
Work around NPEs from early queries to ModelManager 2024-03-22 14:05:10 -04:00
embeddedt
3ad7a8ce9d
Merge 1.19.2 into 1.20 2024-03-20 21:38:15 -04:00
embeddedt
b916ef5ae9
Update mixin for 1.19 renames 2024-03-20 16:52:34 -04:00
embeddedt
9c2fbfcae6
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2024-03-20 16:45:55 -04:00
embeddedt
1814bd3e1f
Reduce overhead of the PotentialSpawns event 2024-03-20 16:39:24 -04:00
embeddedt
070b7b6d12
Add some simple patches to cut down allocation rate when ticking chunks 2024-03-20 15:44:28 -04:00
embeddedt
a0fdb3e6d7
Update for FML changes 2024-03-20 15:18:22 -04:00
embeddedt
94d37544b2
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-03-20 14:53:06 -04:00
embeddedt
bf74ab5a80
Mitigate excessive resource usage from Night Config 2024-03-20 14:40:56 -04:00
embeddedt
e1ff64785e
Fix "Illegal prefix" error in log when custom class/resource locators are in use 2024-03-20 14:00:23 -04:00
embeddedt
0e9d024c5d
Do not treat invalid ModelResourceLocations as top-level when baking dynamic models
Related: #379
2024-03-20 10:18:45 -04:00
embeddedt
de63462363
Merge 1.19.2 into 1.20 2024-03-17 16:09:42 -04:00
embeddedt
e39cc1ca15
Update for Forge registry changes 2024-03-17 16:00:08 -04:00
embeddedt
ebb4f26777
Merge 1.19.2 into 1.20 2024-03-17 15:55:35 -04:00
embeddedt
571d6c6865
Merge 1.18 into 1.19.2 2024-03-17 15:55:34 -04:00
embeddedt
5cc62f7e90
Merge 1.16 into 1.18 2024-03-17 15:55:33 -04:00
embeddedt
31cc0a0da0
Retrieve block name once per state 2024-03-17 15:55:07 -04:00
embeddedt
280d14a595
Merge 1.19.2 into 1.20 2024-03-17 15:52:55 -04:00
embeddedt
3b0e7ce18f
Merge 1.18 into 1.19.2 2024-03-17 15:52:54 -04:00
embeddedt
09e2e0e145
Merge 1.16 into 1.18 2024-03-17 15:52:54 -04:00
embeddedt
06726296fe
Speed up ModelBakeEventHelper constructor 2024-03-17 15:52:41 -04:00
embeddedt
d128ca12c9
Merge 1.19.2 into 1.20 2024-03-17 15:08:24 -04:00
embeddedt
fc2bcc3fb6
Merge 1.18 into 1.19.2 2024-03-17 15:08:23 -04:00
embeddedt
89badd662b
Merge 1.16 into 1.18 2024-03-17 15:08:22 -04:00
embeddedt
d854fcffff
Move stalled async chunk load detection to its own config
This seems to sometimes be a hotspot in profiling, and the log
message is not commonly reported nowadays, indicating most mods
have probably fixed their code.
2024-03-17 15:06:58 -04:00
embeddedt
7b2a0e39be
Merge 1.19.2 into 1.20 2024-03-14 22:13:57 -04:00
embeddedt
3c17a5b4a2
Merge 1.18 into 1.19.2 2024-03-14 22:13:57 -04:00
embeddedt
89b07422e7
Merge 1.16 into 1.18 2024-03-14 22:13:56 -04:00
embeddedt
e6bb67cb05
Disable the testmod by default 2024-03-14 22:13:45 -04:00
embeddedt
095ba1905d
Merge 1.19.2 into 1.20 2024-03-10 21:58:39 -04:00
embeddedt
36f2564d6a
Store delegates on registry objects to avoid map lookup 2024-03-10 21:54:27 -04:00
embeddedt
f1fc20d5a1
Merge 1.19.2 into 1.20 2024-03-08 17:51:05 -05:00
embeddedt
1747cb0b46
Merge 1.18 into 1.19.2 2024-03-08 17:51:04 -05:00
embeddedt
6531e605c2
Merge 1.16 into 1.18 2024-03-08 17:51:02 -05:00
embeddedt
40b9ac6002
Disable pose stack bugfix when OptiFine is installed
Related: #376
2024-03-08 17:49:46 -05:00
embeddedt
263ed51369
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-03-04 16:39:07 -05:00
embeddedt
a197120f57
Merge 1.18 into 1.19.2 2024-03-04 16:38:22 -05:00
embeddedt
49364f6f6d
Merge 1.16 into 1.18 2024-03-04 16:38:20 -05:00
embeddedt
a45783647f
Make the block model cache thread-local instead of using a lock 2024-03-04 16:37:50 -05:00
embeddedt
e7632b7f0b
Remove Blueprint memory leak patch 2024-03-02 12:28:04 -05:00
embeddedt
56779b9a5b
Merge 1.19.2 into 1.20 2024-03-01 11:33:03 -05:00
embeddedt
124112259e
Reduce load factor of ForgeRegistry delegate map 2024-03-01 11:32:24 -05:00
embeddedt
01a68a2453
Merge 1.19.2 into 1.20 2024-02-28 20:10:52 -05:00
embeddedt
a1ece7da38
Merge 1.18 into 1.19.2 2024-02-28 20:10:06 -05:00
embeddedt
c1f409f9ad
Merge 1.16 into 1.18 2024-02-28 20:09:50 -05:00
embeddedt
ad1e12a3bb
Remove unfinished/obsolete registry & block optimizations
These patches were unfinished, are known to be buggy, and won't make
sense in modern versions of Minecraft, where many of the underlying
issues have been addressed in other ways
2024-02-28 20:07:56 -05:00
embeddedt
e1fcac1761
Merge 1.19.2 into 1.20 2024-02-26 16:40:47 -05:00
embeddedt
3e3b9128c3
Disable primitive chat signing removal if NCR is installed 2024-02-26 16:40:29 -05:00
embeddedt
73b0f13de0
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-02-26 16:28:20 -05:00
embeddedt
f4f76cada3
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-02-26 16:27:55 -05:00
embeddedt
51c31bf0b8
Spotless 2024-02-26 16:27:24 -05:00
embeddedt
feaf363fd8
Add oversimplified version of No Chat Reports
This has no player-friendly UI whatsoever, doesn't work on
enforce-secure-profile servers, and has had very limited testing.

In exchange, it costs virtually nothing to maintain.
2024-02-26 16:21:41 -05:00
embeddedt
edda3b4e02
Merge 1.19.2 into 1.20 2024-02-23 16:45:22 -05:00
embeddedt
5fe5a484a3
Use fastutil maps for holder lookups in Forge registry 2024-02-23 16:45:01 -05:00
embeddedt
e91220cdea Retrieve missing model when first required 2024-02-07 15:28:01 -05:00
embeddedt
e0516ebc51
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-02-05 09:14:35 -05:00
embeddedt
2d2bc94747
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2024-02-04 20:22:46 -05:00
embeddedt
2120774df5
Update patch for 1.18 2024-02-04 20:21:53 -05:00
embeddedt
e9c0f6df3b
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-02-04 20:20:45 -05:00
embeddedt
12d69bec45
Fix https://github.com/MinecraftForge/MinecraftForge/issues/9118 2024-02-04 20:05:05 -05:00
embeddedt
e1d203ba10
Merge 1.19.2 into 1.20 2024-02-02 20:38:31 -05:00
embeddedt
e3a41d7416
Merge 1.18 into 1.19.2 2024-02-02 20:38:30 -05:00
embeddedt
8b0080256c
Merge 1.16 into 1.18 2024-02-02 20:38:30 -05:00
embeddedt
f12d7723c0
Call onDynamicResourcesStatusChange if dynamic resources is enabled 2024-02-02 20:38:25 -05:00
embeddedt
81c4980738 Fix resource pack cache engine being unable to list resource stacks for files 2024-02-01 10:06:18 -05:00
embeddedt
df9d280b1c Merge 1.19.2 into 1.20 2024-01-30 15:47:47 -05:00
embeddedt
f4c7832964 Merge 1.18 into 1.19.2 2024-01-30 15:47:46 -05:00
embeddedt
a36ad8a4b4 Merge 1.16 into 1.18 2024-01-30 15:47:45 -05:00
embeddedt
2c963888b5 Don't run mappings clearer on FL 0.15+, it's not needed
Related: #329
2024-01-30 15:47:16 -05:00
embeddedt
6207162a17 Merge 1.19.2 into 1.20 2024-01-29 15:30:53 -05:00
embeddedt
efdb1d475d Merge 1.18 into 1.19.2 2024-01-29 15:30:52 -05:00
embeddedt
ca3c02677e Merge 1.16 into 1.18 2024-01-29 15:30:51 -05:00
Kichura
20c0f3dd6a
Update GitHub workflows (#358) 2024-01-28 13:15:27 -05:00
embeddedt
c32fad10e0
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2024-01-27 20:22:16 -05:00
embeddedt
0d4126df41
Merge 1.18 into 1.19.2 2024-01-27 20:19:15 -05:00
embeddedt
41596444a3
Merge remote-tracking branch 'origin/1.16' into 1.18 2024-01-27 20:18:49 -05:00
Fury_Phoenix
c749fc1aeb
Tidy up version detection (#352) 2024-01-25 15:19:37 -05:00
embeddedt
55cb94f1d1 Add textureGetter parameter to onBakedModelLoad 2024-01-24 10:38:57 -05:00
embeddedt
94ca6ccdd6 Add bug report template, heavily derived from Sodium 2024-01-18 16:14:37 -05:00
embeddedt
a100622a03
Only apply resource pack speedup on paths starting with assets or data
Related: #354
2024-01-13 11:22:29 -05:00
embeddedt
27d831ef6a
Merge 1.18 into 1.19.2 2024-01-13 11:17:16 -05:00
embeddedt
0a8a88047c
Merge 1.16 into 1.18 2024-01-13 11:16:03 -05:00
embeddedt
d7146a0667
Restrict resource pack cache to assets/ and data/ folders 2024-01-13 11:15:19 -05:00
embeddedt
c6e01f8a59 Merge 1.19.2 into 1.20 2024-01-12 15:49:13 -05:00
embeddedt
1f7db94281 Merge 1.18 into 1.19.2 2024-01-12 15:49:02 -05:00
embeddedt
5d6abe46f5 Merge 1.16 into 1.18 2024-01-12 15:49:00 -05:00
embeddedt
03e7df5308 Make dynamic maps return empty immutable collections instead of throwing 2024-01-12 15:28:34 -05:00
embeddedt
6fa3e64210 Lower priority of datapack reload exception mixins 2024-01-12 15:18:11 -05:00
embeddedt
b2d80ada34
Use wildcard on ItemOverrides mixin to capture Forge rename 2024-01-11 21:04:48 -05:00
embeddedt
9d95a5363f
Update cap mixin for 1.20 changes 2024-01-04 20:35:41 -05:00
embeddedt
c85f7e49d7
Merge 1.19.2 into 1.20 2024-01-04 20:32:38 -05:00
embeddedt
2e88482344
Update for 1.19 model data manager changes 2024-01-04 20:32:30 -05:00
embeddedt
91602ae7d6
Merge 1.19.2 into 1.20 2024-01-04 20:31:06 -05:00
embeddedt
ac4ebd871c
Merge 1.18 into 1.19.2 2024-01-04 20:31:05 -05:00
embeddedt
1d67197df1
Merge 1.16 into 1.18 2024-01-04 20:31:04 -05:00
embeddedt
c678ebbb91
Avoid refresh loop if no model data needs refreshing 2024-01-04 20:30:13 -05:00
embeddedt
7174ae1454
Do not actually load all models in replaceAll, use clever trick instead
Otherwise, it takes 20 seconds to run this with just Mekanism+Additions+Pneumaticcraft
2024-01-02 12:17:53 -05:00
embeddedt
9375a4233b
Fix Forge errors 2024-01-02 09:55:55 -05:00
embeddedt
17fdccddfe
Allow missing models on item overrides
Please ask your servers to stop shipping the client invalid model
files.

Related: #343
2024-01-02 09:52:55 -05:00
embeddedt
3214311bb6
Slightly optimize entity capability retrieval 2024-01-01 19:03:52 -05:00
embeddedt
d0fd498682
Suppress mixin forceload logging when clear_mixin_info is on 2024-01-01 12:25:16 -05:00
embeddedt
a186c956f7
Merge 1.19.2 into 1.20 2023-12-30 19:06:11 -05:00
embeddedt
5e983ea936
Merge 1.18 into 1.19.2 2023-12-30 19:05:49 -05:00
embeddedt
8320c31f85
Merge 1.16 into 1.18 2023-12-30 19:05:38 -05:00
embeddedt
1da264e5a7
Bump Fabric Loader 2023-12-30 19:05:20 -05:00
embeddedt
6d7b50bdd8
Merge 1.19.2 into 1.20 2023-12-30 19:02:49 -05:00
embeddedt
300ff4d5f8
Merge 1.18 into 1.19.2 2023-12-30 19:02:48 -05:00
embeddedt
3fa0c3923a
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-30 19:02:42 -05:00
embeddedt
db5a3234d2
Update MixinExtras 2023-12-30 18:59:44 -05:00
embeddedt
8b97ebf945
Even More ClientOnlyMixin 2023-12-28 14:45:15 -05:00
embeddedt
6706715fb1
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-28 14:42:25 -05:00
embeddedt
cc1be852bb
More ClientOnlyMixin 2023-12-28 14:42:01 -05:00
embeddedt
35c82b81c8
Mark WorldSelectionList mixin as client-only 2023-12-28 14:33:39 -05:00
embeddedt
357d421f5a
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-28 14:26:35 -05:00
embeddedt
5772661dfb
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-12-28 14:26:26 -05:00
embeddedt
f6c7b3109b
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-28 14:25:15 -05:00
embeddedt
e301d7d480
Shadow annotations project so they are in the production jar 2023-12-28 14:08:32 -05:00
embeddedt
8d6a344ded
Use correct comment style 2023-12-28 14:08:25 -05:00
embeddedt
4512bc6fbd
Generate config options from both 'mixins' and 'client' keys 2023-12-28 12:31:29 -05:00
embeddedt
4f49ba3f9b
Apply excludedTaskNames in the testmod subproject rather than globally 2023-12-28 12:31:00 -05:00
Fury_Phoenix
7e53a8bc73
Eliminate extraneous casts (#327) 2023-12-28 09:38:54 -05:00
Fury_Phoenix
06bfd71d07
Generate mixin configs automatically using custom AP (#305) 2023-12-28 09:36:49 -05:00
embeddedt
ae8cfbaa3d
Disable dynamic DFU when Litematica is installed 2023-12-27 19:12:11 -05:00
embeddedt
0ea384f3e6
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-27 19:08:21 -05:00
embeddedt
837a66befc
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-12-27 19:07:33 -05:00
embeddedt
6f0d6e473f
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-27 19:06:49 -05:00
embeddedt
a79ea9766a
Prevent mod mixins from applying if there is a Forge loading error 2023-12-27 18:42:39 -05:00
embeddedt
675c58a437
Only call put on the model map if the replacement model is different 2023-12-27 16:13:45 -05:00
embeddedt
d1863cc66e
Make replaceAll implementation more robust, add warning 2023-12-27 16:06:22 -05:00
embeddedt
11508fbe07
Track duration of model bake events when dynamic resources is enabled 2023-12-27 16:03:54 -05:00
embeddedt
aee0b2a47d
Add Mekanism to model bake event helper 2023-12-27 15:59:51 -05:00
embeddedt
d76fd84b76
Support replaceAll on the wrapping model registry 2023-12-27 15:56:52 -05:00
embeddedt
6578040e77
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-27 15:27:03 -05:00
embeddedt
ecef37ac60
Make handlers not static 2023-12-27 15:26:58 -05:00
embeddedt
c96f7ecf11
Merge 1.19.2 into 1.20 2023-12-27 15:20:17 -05:00
embeddedt
d90a56ff40
Merge 1.18 into 1.19.2 2023-12-27 15:20:16 -05:00
embeddedt
bcd2e80821
Merge 1.16 into 1.18 2023-12-27 15:20:15 -05:00
embeddedt
152cdc4469
Disable ModelDataManager fixes if Rubidium is installed
Since legacy Rubidium versions only retrieve model data on a worker
thread, the data will probably never be refreshed, causing rendering
issues.
2023-12-27 15:19:13 -05:00
embeddedt
2406c1a338
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-26 20:53:09 -05:00
embeddedt
4646b525f3
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-12-26 20:52:51 -05:00
embeddedt
ae561db9e3
Update mixin for 1.19 model data changes 2023-12-26 20:52:23 -05:00
embeddedt
ebf1d93422
Suppress mixin remap error 2023-12-26 20:51:26 -05:00
embeddedt
b5ef37a713
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-12-26 20:48:37 -05:00
embeddedt
85928b5b9c
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-26 20:47:23 -05:00
embeddedt
12b0d352cd
Fix some concurrency issues in Forge's ModelDataManager
Model data is now refreshed in a 3x3 radius if retrieved on
the main thread, but not refreshed at all if retrieved on a
worker. This should emulate the old behavior well enough
for most (if not all) mods, while preventing weird CMEs
from accessing block entities off-thread
2023-12-26 20:44:59 -05:00
Fury_Phoenix
8aa04e13a6
Remove testmod genSources task (#333) 2023-12-26 10:13:46 -05:00
embeddedt
6ef5654bb6
Merge 1.19.2 into 1.20 2023-12-23 21:28:42 -05:00
embeddedt
0abffa26ee
Merge 1.18 into 1.19.2 2023-12-23 21:28:41 -05:00
embeddedt
7e57ad8279
Merge 1.16 into 1.18 2023-12-23 21:28:02 -05:00
embeddedt
97ba361867
Retrieve quads on incorrect cullface lists if direction matches 2023-12-23 21:27:39 -05:00
embeddedt
a87399a10f
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-23 19:06:59 -05:00
embeddedt
9034688502
Merge 1.18 into 1.19.2 2023-12-23 19:05:37 -05:00
embeddedt
cef8abe247
Merge 1.16 into 1.18 2023-12-23 19:05:37 -05:00
embeddedt
60b372870b
Fix nixie tubes being invisible with faster_item_rendering 2023-12-23 19:05:16 -05:00
embeddedt
95496fc27c
Merge 1.19.2 into 1.20 2023-12-23 17:15:32 -05:00
embeddedt
d8da6c08a0
Merge 1.18 into 1.19.2 2023-12-23 17:15:26 -05:00
embeddedt
7547a9227c
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-23 17:15:10 -05:00
embeddedt
8058d4caa9
Remove dynamic item overrides
This system conflicts with other optimization mods (e.g. Noxesium)
and is annoying to maintain. Please stop using item overrides and
use real items/mods instead
2023-12-23 17:12:50 -05:00
embeddedt
f35d920801
Merge 1.19.2 into 1.20 2023-12-23 15:57:41 -05:00
embeddedt
7efe10a8a9
Merge 1.18 into 1.19.2 2023-12-23 15:57:40 -05:00
embeddedt
94fbefd901
Update mixin 2023-12-23 15:57:12 -05:00
embeddedt
88a276eed9
Update mixin target 2023-12-23 15:55:32 -05:00
embeddedt
8bcd85d079
Merge 1.18 into 1.19.2 2023-12-23 15:54:20 -05:00
embeddedt
8729e50f1b
Merge 1.19.2 into 1.20 2023-12-23 15:54:20 -05:00
embeddedt
ee8093fc50
Merge 1.16 into 1.18 2023-12-23 15:54:19 -05:00
embeddedt
a7c2424b14
Handle missing models in item overrides 2023-12-23 15:53:40 -05:00
embeddedt
5ff2951b5a
Work around Flywheel leaving freed buffers in BufferBuilder 2023-12-23 14:12:16 -05:00
embeddedt
4d0444ba2a
Merge 1.19.2 into 1.20 2023-12-21 16:51:11 -05:00
embeddedt
f59aa5b19c
Merge 1.18 into 1.19.2 2023-12-21 16:51:10 -05:00
embeddedt
00fa8227c3
Merge 1.16 into 1.18 2023-12-21 16:50:40 -05:00
embeddedt
bc2e84bacc
Cache item override model instance 2023-12-21 16:50:08 -05:00
embeddedt
ed74748994
Merge 1.19.2 into 1.20 2023-12-21 13:41:55 -05:00
embeddedt
0111102d25
Remove obsolete mixin 2023-12-21 13:41:30 -05:00
embeddedt
c5afe3c769
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-21 13:32:19 -05:00
embeddedt
1cfe0216ac
Remove CTM layer hacks entirely on 1.19+, code is unused 2023-12-21 13:31:23 -05:00
embeddedt
ba6103bbc7
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-12-21 13:28:46 -05:00
embeddedt
1f16ce835a
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-21 13:21:29 -05:00
embeddedt
7e2f3f3fb9
Rewrite CTM predicate handling again, fix more bugs 2023-12-21 13:16:25 -05:00
embeddedt
09939a551f
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-12-18 22:11:14 -05:00
embeddedt
af13e30f95
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-18 22:06:24 -05:00
embeddedt
9c00f7297d
Reset block predicate when model is loaded
Should help invalidate Embeddium's cache
2023-12-18 22:03:18 -05:00
embeddedt
aa53a7610b
Only wrap top-level CTM models if dynamic resources is on 2023-12-18 22:02:21 -05:00
embeddedt
5fa94bf5e4
Add Elevator Mod to dynamic resources iteration list 2023-12-18 21:39:18 -05:00
embeddedt
b5c4b79eb8
Merge 1.19.2 into 1.20 2023-12-14 21:11:58 -05:00
embeddedt
5e8a111fed
Merge 1.18 into 1.19.2 2023-12-14 21:11:57 -05:00
embeddedt
fe65ffa4d1
Merge 1.16 into 1.18 2023-12-14 21:11:56 -05:00
embeddedt
240fa4b510
Implement dynamic model cache on vanilla ItemModelShaper 2023-12-14 21:11:10 -05:00
embeddedt
8677532629
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-14 20:44:44 -05:00
embeddedt
559bdb612c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-12-14 20:41:47 -05:00
embeddedt
5579743b6c
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-14 20:39:20 -05:00
embeddedt
81836a838d
Implement caching on the blockstate and item to model maps 2023-12-14 20:10:54 -05:00
embeddedt
0056a57f30
Optimize RegistryDelegate#hashCode() 2023-12-13 14:44:25 -05:00
embeddedt
e47bdbf6d0
Merge 1.19.2 into 1.20 2023-12-11 11:01:50 -05:00
embeddedt
845671ce07
Merge 1.18 into 1.19.2 2023-12-11 11:01:49 -05:00
embeddedt
07159b5eb7
Merge 1.16 into 1.18 2023-12-11 11:01:48 -05:00
embeddedt
a76c7f2505
Prevent mixin error if Sophisticated Backpacks isn't installed 2023-12-11 11:01:23 -05:00
embeddedt
cba08057cf
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-12-11 10:58:54 -05:00
embeddedt
b351febc82
Patch CME in Sophisticatd Backpacks 2023-12-11 10:58:10 -05:00
embeddedt
9464f07a5a
Replace hacky capturing with MixinExtras 2023-12-09 14:32:52 -05:00
embeddedt
28ac5eaec4
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-12-09 14:08:31 -05:00
embeddedt
11f313f6e7
Avoid capturedLocation being replaced unexpectedly 2023-12-09 13:50:04 -05:00
embeddedt
ccfc282cfc
Remove hot allocations in ForgeRegistry#getDelegateOrThrow 2023-12-07 22:14:30 -05:00
embeddedt
46127b50f3
Invalidate blockstate cache in place of initCache 2023-12-06 20:44:31 -05:00
embeddedt
cb09af7e86 Mark registry redirect as non-required
Related: #309
2023-11-30 15:45:27 -05:00
embeddedt
2c577da8fd
Spotless 2023-11-27 07:41:43 -05:00
embeddedt
2e9166c7df
Rewrite missing model emulation functionality for 1.20+ dynres implementation
Fixes #308
2023-11-27 07:38:53 -05:00
embeddedt
7be382a3ce More ClientOnlyMixin 2023-11-23 10:16:01 -05:00
embeddedt
7c57ffd2c6 Merge 1.19.2 into 1.20 2023-11-23 10:12:19 -05:00
embeddedt
bf43ba7bf4 Merge 1.18 into 1.19.2 2023-11-23 10:12:18 -05:00
embeddedt
c0f162716b Merge 1.16 into 1.18 2023-11-23 10:12:17 -05:00
embeddedt
2946b3a7b5 Handle path arrays with empty components correctly
Related: #304
2023-11-23 10:11:45 -05:00
embeddedt
61ce2e7117 Mark buffer builder fix as client only 2023-11-23 09:58:20 -05:00
embeddedt
8ce41242ed Update generic 2023-11-23 09:58:03 -05:00
embeddedt
c7a60f5112 Update RegistryObject for 1.19.2 changes 2023-11-23 09:56:35 -05:00
embeddedt
9fb1464176 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-11-23 09:56:22 -05:00
embeddedt
488be0c748 Update RegistryObject package name 2023-11-23 09:56:11 -05:00
embeddedt
1002baa6b1 Merge 1.19.2 into 1.20 2023-11-23 09:51:13 -05:00
embeddedt
0b9b49c360 Merge 1.18 into 1.19.2 2023-11-23 09:51:05 -05:00
embeddedt
0aea884052 Merge 1.16 into 1.18 2023-11-23 09:51:03 -05:00
embeddedt
a1f3300a8a More ClientOnlyMixin
Related: #297
2023-11-23 09:50:47 -05:00
Bogdan
ef6c14a61e
Create ru_ru.json (#303) 2023-11-22 09:47:11 -05:00
notlin4
27167ea42c
Update zh_tw.json (#302) 2023-11-21 12:05:45 -05:00
embeddedt
a531df53cb
Fix RegistryObject#get allocating on every call
Credit to jaskarth for discovering this problem
2023-11-19 19:49:08 -05:00
embeddedt
3fb3bb3c11
Merge 1.19.2 into 1.20 2023-11-11 17:26:27 -05:00
embeddedt
8bc92e051e
Merge 1.18 into 1.19.2 2023-11-11 17:26:26 -05:00
embeddedt
adc3dbaf57
Merge 1.16 into 1.18 2023-11-11 17:26:25 -05:00
embeddedt
7c0f8b8bef
Stop logging for suspicious async chunkloads if they complete quickly enough 2023-11-11 17:26:21 -05:00
embeddedt
193b0922cc Remove blockstate lambda fallback on Forge
The conversion of MRL->state->MRL is very costly and slows down
model bake events by a lot. Since Fabric Model Loading API is
now standard, there is no need to pass models through the lambda
anymore
2023-11-10 15:42:37 -05:00
embeddedt
abfaea19a5 Merge 1.19.2 into 1.20 2023-11-07 17:27:26 -05:00
embeddedt
3e52c75d0f Merge 1.18 into 1.19.2 2023-11-07 17:27:24 -05:00
embeddedt
552eea488d Merge 1.16 into 1.18 2023-11-07 17:27:22 -05:00
embeddedt
215b797e7b Fix replaceAll being broken on the model registry
Thanks Guava.
2023-11-07 17:26:01 -05:00
其智乃反不能及
5983ed5bf3
Update zh_cn.json (#288) 2023-11-07 09:15:17 -05:00
embeddedt
ed9dc3719c
Merge 1.19.2 into 1.20 2023-11-05 21:59:32 -05:00
embeddedt
8bb70222ce
Merge 1.18 into 1.19.2 2023-11-05 21:59:08 -05:00
embeddedt
2f3df11220
Merge 1.16 into 1.18 2023-11-05 21:59:07 -05:00
embeddedt
134dc0ef20
Fix path replacements being too aggressive 2023-11-05 21:58:42 -05:00
embeddedt
bd55e16d6e
Add description for cache_profile_texture_url 2023-11-05 21:23:58 -05:00
embeddedt
e859ce8eb6
Avoid slow getHash call when retrieving skins
Co-authored-by: Fury_Phoenix <64714532+Phoenix-Starlight@users.noreply.github.com>
2023-11-05 21:22:17 -05:00
embeddedt
d11e9ac190
Mark Embers as requiring namespaced model registry
Related: #284
2023-11-05 21:00:25 -05:00
embeddedt
3551ab645a
Fix compile errors 2023-11-04 10:26:58 -04:00
embeddedt
cc60cba1f2
Refactor Forge dynamic resources implementation to be similar to Fabric 2023-11-04 10:21:38 -04:00
embeddedt
fb84fda4de
Merge 1.19.2 into 1.20 2023-11-04 09:02:16 -04:00
embeddedt
53b7d34649
Merge 1.18 into 1.19.2 2023-11-04 09:02:15 -04:00
embeddedt
2ecd0c654b
Merge 1.16 into 1.18 2023-11-04 09:02:14 -04:00
embeddedt
4de9022e3c
Warn if keySet is used by a mod when dynamic resources is on 2023-11-04 09:00:57 -04:00
embeddedt
482c0ca503 Allow dimensions to be removed
Fixes https://github.com/neoforged/NeoForge/issues/102
2023-10-31 09:50:01 -04:00
embeddedt
b6a47da3b0 Merge 1.19.2 into 1.20 2023-10-30 14:54:19 -04:00
embeddedt
819cb13d43 Merge 1.18 into 1.19.2 2023-10-30 14:53:53 -04:00
embeddedt
32ad8f6df1 Update RS integration for 1.18+ 2023-10-30 14:53:34 -04:00
embeddedt
58f79e25e9
Update Diagonal Fences mixin on 1.19 2023-10-30 09:41:48 -04:00
embeddedt
d358ea37a8
Remove Diagonal Fences mixin on 1.20+, mod now uses dynres-compatible logic
Related: #199
2023-10-30 09:30:52 -04:00
embeddedt
2a6077cb65
Merge branch '1.20' of https://github.com/embeddedt/ModernFix into 1.20 2023-10-29 21:17:49 -04:00
embeddedt
d557725c82
Merge 1.19.2 into 1.20 2023-10-29 21:17:24 -04:00
embeddedt
6b01f0450b
Merge 1.16 into 1.18 2023-10-29 21:15:43 -04:00
embeddedt
6a8d63a2cd
Merge 1.18 into 1.19.2 2023-10-29 21:15:43 -04:00
embeddedt
ced7f866d8
Revert "Use copy-on-write map for permanent overrides"
This solution is also not good enough. It causes catastrophic
time complexity with mods that call get and put in rapid
succession (i.e. every Forge mod using ModelBakeEvent)
2023-10-29 21:14:51 -04:00
embeddedt
375276ea1f
Disable mixin.feature.registry_event_progress by default 2023-10-29 21:05:17 -04:00
embeddedt
72a653e532
Merge branch 'experiment/loading-screen' into 1.20 2023-10-29 21:04:35 -04:00
embeddedt
59235e6a21
Fix spotless 2023-10-29 11:44:25 -04:00
embeddedt
09490df85d
Fix compile errors 2023-10-29 11:41:35 -04:00
embeddedt
a677f6d571
Merge 1.19.2 into 1.20 2023-10-29 11:37:49 -04:00
embeddedt
d4f09f6ff9
Merge 1.18 into 1.19.2 2023-10-29 11:36:16 -04:00
embeddedt
fccbae33db
Merge 1.16 into 1.18 2023-10-29 11:36:15 -04:00
embeddedt
621ecf6b3e
Use copy-on-write map for permanent overrides 2023-10-29 11:35:46 -04:00
embeddedt
81baeea35b
Support earlyy baking models on Forge as well
Fixes FFAPI model provider hooks not running
2023-10-28 20:12:46 -04:00
embeddedt
f4f3eff242
Merge 1.19.2 into 1.20 2023-10-28 20:06:02 -04:00
embeddedt
0b5145f290
Merge 1.18 into 1.19.2 2023-10-28 20:06:01 -04:00
embeddedt
0a72abb519
Merge 1.16 into 1.18 2023-10-28 20:06:00 -04:00
embeddedt
5d984f653e
Don't log error if NO_GROUP field is missing
Fixes error message in log with Connector
2023-10-28 20:05:55 -04:00
embeddedt
7cb660f955
Fix FFAPI Model Loading API v1 causing missing item models 2023-10-28 20:00:48 -04:00
embeddedt
3eff8c787d
Merge 1.19.2 into 1.20 2023-10-28 09:54:25 -04:00
embeddedt
b9d81f44e6
Merge 1.18 into 1.19.2 2023-10-28 09:54:24 -04:00
embeddedt
93fbbfe2d1
Force UnsafeBufferHelper to be classloaded at startup 2023-10-28 09:50:25 -04:00
Moulberry
e36ba04921
Avoid mods causing double free when BufferBuilder leak fix is enabled 2023-10-28 09:44:12 -04:00
embeddedt
7054c16f6c Merge 1.19.2 into 1.20 2023-10-25 17:18:45 -04:00
embeddedt
b7b510f807 Merge 1.18 into 1.19.2 2023-10-25 17:18:43 -04:00
embeddedt
4054bd8a23 Merge 1.16 into 1.18 2023-10-25 17:18:42 -04:00
embeddedt
89dab59980 Revert "Change permanentOverrides to ConcurrentHashMap"
This reverts commit a5b5733965.

We require the ability to store null values in the map for now
2023-10-25 17:17:52 -04:00
embeddedt
f4ce7072a6 Enable dynamic sounds now that Guava issue is worked around 2023-10-25 15:03:16 -04:00
embeddedt
daea9dd83a Merge 1.19.2 into 1.20 2023-10-25 15:00:19 -04:00
embeddedt
b10e9de54c Merge 1.18 into 1.19.2 2023-10-25 14:58:33 -04:00
embeddedt
14abfef522 Merge 1.16 into 1.18 2023-10-25 14:58:01 -04:00
embeddedt
77760d7dd2 Remember previous scroll position on config screen 2023-10-25 14:56:37 -04:00
embeddedt
f391e97a62 Handle Knot behaving differently from FML with getResource 2023-10-25 14:34:45 -04:00
embeddedt
fd68efec0c Remove async_jei option from 1.18 listing 2023-10-25 14:30:10 -04:00
Fury_Phoenix
c0cdbd122e
Unify ModelMangerMixin (#265) 2023-10-25 14:26:01 -04:00
embeddedt
e397f0ca78 Merge 1.19.2 into 1.20 2023-10-25 14:24:17 -04:00
embeddedt
04a72f4d90 Merge 1.18 into 1.19.2 2023-10-25 14:24:16 -04:00
embeddedt
8b37a1dbfc Disable buffer builder fix when isometric-renders is installed
Related: #273
2023-10-25 14:23:27 -04:00
embeddedt
b943dc1449 Fix deobfuscation check not working on Forge 1.18+ 2023-10-25 14:22:20 -04:00
embeddedt
fd61abb375 Drop TinyFD patch on 1.20+ 2023-10-24 12:45:56 -04:00
embeddedt
735a626cf3 Merge 1.19.2 into 1.20 2023-10-24 12:45:39 -04:00
embeddedt
54c7dbd16e Merge 1.18 into 1.19.2 2023-10-24 12:45:37 -04:00
embeddedt
c5a5b01bfb Merge 1.16 into 1.18 2023-10-24 12:45:35 -04:00
embeddedt
6740857274 Fix unsanitized input being passed to TinyFD 2023-10-24 12:45:13 -04:00
Phoenix-Starlight
9f040b2c43
Dynamic sounds code cleanup (#264) 2023-10-14 22:17:00 -04:00
embeddedt
a5b5733965
Change permanentOverrides to ConcurrentHashMap
Should help address thread contention noted while profiling
2023-10-14 13:24:26 -04:00
embeddedt
b567658318
Disable async_jei by default, to match newer versions
There have been a couple isolated reports of weird JEI behavior,
and this might be why
2023-10-14 13:20:26 -04:00
embeddedt
7cbea84706
Merge 1.19.2 into 1.20 2023-10-13 10:47:52 -04:00
embeddedt
5fbbacbe11
Merge 1.18 into 1.19.2 2023-10-13 10:47:51 -04:00
embeddedt
4b8ec822fe
Merge 1.16 into 1.18 2023-10-13 10:47:50 -04:00
embeddedt
8059fc4672
Make clear_fabric_mapping_tables work on Fabric Loader 0.14.23 2023-10-13 10:47:44 -04:00
embeddedt
49c1bc71ba
Patch modded shape caches to be thread-safe
Related: #260
2023-10-13 10:47:44 -04:00
Phoenix-Starlight
e7277b89d5
Fix dynamic_sounds breaking on 1.16 (#259)
An issue in Guava (https://github.com/google/guava/issues/3081) causes the removal listener to fire even when entries haven't actually been removed. We filter them to get around this.
2023-10-12 22:19:46 -04:00
embeddedt
cbfe1636ff
Merge 1.19.2 into 1.20 2023-10-10 17:40:30 -04:00
embeddedt
cebe1c308a
Merge 1.18 into 1.19.2 2023-10-10 17:40:29 -04:00
embeddedt
39fa555209
Merge 1.16 into 1.18 2023-10-10 17:40:29 -04:00
embeddedt
538d332310
Disable dynamic sounds by default until it can be tested more 2023-10-10 17:39:54 -04:00
embeddedt
ed1f2c5837
Merge 1.19.2 into 1.20 2023-10-09 08:37:42 -04:00
embeddedt
1d68dd797c
Merge 1.18 into 1.19.2 2023-10-09 08:37:04 -04:00
embeddedt
da71fc1a2c
Merge 1.16 into 1.18 2023-10-09 08:37:03 -04:00
embeddedt
40b04cbded
Fix cache_upgraded_structures leaking open input streams 2023-10-09 08:36:35 -04:00
羊羽ちゃん
504397bc23
Update ja_jp.json (#255) 2023-10-08 21:09:29 -04:00
embeddedt
e537cbe29a Merge 1.19.2 into 1.20 2023-10-07 18:47:10 -04:00
embeddedt
b1e91686da Merge 1.18 into 1.19.2 2023-10-07 18:47:09 -04:00
embeddedt
5007c5e286 Merge 1.16 into 1.18 2023-10-07 18:47:08 -04:00
embeddedt
bf6979e45b Cleanup dynamic sounds patch, bump eviction time to 5 minutes 2023-10-07 18:44:33 -04:00
Phoenix-Starlight
803aaba204
Dynamic sound unloading (#234) 2023-10-07 18:41:52 -04:00
embeddedt
637c14fb6d Merge 1.19.2 into 1.20 2023-10-07 17:48:38 -04:00
embeddedt
ea918a44c4 Merge 1.18 into 1.19.2 2023-10-07 17:48:36 -04:00
embeddedt
5c73ddeaf8 Port vehicle mixin to 1.18 2023-10-07 17:48:30 -04:00
embeddedt
b56fbc853d Merge 1.19.2 into 1.20 2023-10-07 17:46:24 -04:00
embeddedt
1a358582a5 Merge 1.18 into 1.19.2 2023-10-07 17:46:23 -04:00
embeddedt
2d14bc3b1b Merge 1.16 into 1.18 2023-10-07 17:46:21 -04:00
embeddedt
6593b6a5cf Preserve rotation 2023-10-07 17:42:04 -04:00
embeddedt
204c8b78c4 Fix lag caused by Forge vehicle resync patch
This patch previously set the player to the entity's position,
which is not always correct for entities that position the player
at an offset (e.g. boats with two entities). Move the player using
positionRider() instead

Original PR: https://github.com/MinecraftForge/MinecraftForge/pull/5160
2023-10-07 17:27:23 -04:00
embeddedt
b1a0d0b94a Merge 1.19.2 into 1.20 2023-10-06 17:07:47 -04:00
embeddedt
d7d75e88d5 Merge 1.18 into 1.19.2 2023-10-06 17:07:46 -04:00
embeddedt
6c7a5c70f5 Merge 1.16 into 1.18 2023-10-06 17:07:23 -04:00
embeddedt
d877ab46f0 Remove reference to Component in NightConfigFixer 2023-10-06 17:06:10 -04:00
embeddedt
c45f83e896 Suppress latest.log warning about structures on 1.20+ 2023-10-06 09:49:12 -04:00
embeddedt
ce0d054e6e Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-10-05 14:31:16 -04:00
embeddedt
c87dee4f3f Merge 1.18 into 1.19.2 2023-10-05 14:30:23 -04:00
embeddedt
fb720782b9 Merge 1.16 into 1.18 2023-10-05 14:30:21 -04:00
embeddedt
36673f275e Tweak dynamic resources injection point on Forge
Related: #252
2023-10-05 14:29:28 -04:00
embeddedt
385523c826 Merge 1.19.2 into 1.20 2023-10-05 14:12:35 -04:00
embeddedt
c387e91f0d Merge 1.18 into 1.19.2 2023-10-05 14:12:33 -04:00
embeddedt
9c02b2c393 Update mixin for 1.18 2023-10-05 14:12:26 -04:00
embeddedt
9306743001 Update package for 1.18 2023-10-05 14:09:25 -04:00
embeddedt
a1f867c26d Merge remote-tracking branch 'origin/1.16' into 1.18 2023-10-05 14:09:04 -04:00
embeddedt
2710a02b2a Detect vanilla connection using custom logic 2023-10-05 14:08:44 -04:00
embeddedt
4090a91272 Merge 1.18 into 1.19.2 2023-10-05 13:37:48 -04:00
embeddedt
00144af296 Merge 1.16 into 1.18 2023-10-05 13:37:46 -04:00
embeddedt
96d01e5a1e Don't read modded recipe book settings on vanilla connection
Related: https://github.com/neoforged/NeoForge/issues/150
2023-10-05 13:37:31 -04:00
embeddedt
225366ee02 Merge 1.19.2 into 1.20 2023-10-03 13:45:37 -04:00
embeddedt
cedcd94417 Merge 1.18 into 1.19.2 2023-10-03 13:45:36 -04:00
embeddedt
43ca13cdf2 Attempt to free leaked BufferBuilders 2023-10-03 13:45:18 -04:00
embeddedt
8fd8efb2e3 Merge 1.19.2 into 1.20 2023-09-27 17:58:52 -04:00
embeddedt
f9856ec591 Merge 1.18 into 1.19.2 2023-09-27 17:58:51 -04:00
embeddedt
0dc068eabf Merge 1.16 into 1.18 2023-09-27 17:58:50 -04:00
embeddedt
c0815b787e Fix legacy solid property not being set correctly when blockstate cache is invalid
Related: #244
2023-09-27 17:49:36 -04:00
羊羽ちゃん
aa25e3f05e
Update ja_jp.json (#248) 2023-09-25 11:08:24 -04:00
I_am_Vietnam
b57eeb38de
Add vi_vn.json (#247) 2023-09-25 10:06:12 -04:00
embeddedt
3011e40972
Merge 1.19.2 into 1.20 2023-09-24 12:50:15 -04:00
embeddedt
47ced6ee40
Merge 1.18 into 1.19.2 2023-09-24 12:50:14 -04:00
embeddedt
db49f73bf5
Merge 1.16 into 1.18 2023-09-24 12:50:13 -04:00
embeddedt
cf362047a6
Fix Modrinth changelog 2023-09-24 12:47:56 -04:00
embeddedt
b1a1d785de
Merge 1.19.2 into 1.20 2023-09-24 12:33:59 -04:00
embeddedt
4529bf36d1
Merge 1.18 into 1.19.2 2023-09-24 12:33:58 -04:00
embeddedt
3150863b2c
Merge 1.16 into 1.18 2023-09-24 12:33:57 -04:00
embeddedt
f59e003df1
Prepare for release 2023-09-24 12:33:48 -04:00
embeddedt
f1ef1a6c41
Merge 1.19.4 into 1.20 2023-09-24 11:55:27 -04:00
embeddedt
d76e841761
Merge 1.19.2 into 1.19.4 2023-09-24 11:55:27 -04:00
embeddedt
c5fee81b8a
Merge 1.18 into 1.19.2 2023-09-24 11:55:26 -04:00
embeddedt
3d1ead98c3
Merge 1.16 into 1.18 2023-09-24 11:55:25 -04:00
embeddedt
5de1518f76
Disable stronghold caching when C2ME is installed
Related: #245
2023-09-24 11:53:39 -04:00
embeddedt
dc4850502d
Merge 1.19.4 into 1.20 2023-09-22 22:05:53 -04:00
embeddedt
8d057a2b55
Merge 1.19.2 into 1.19.4 2023-09-22 22:05:52 -04:00
embeddedt
a11e70c413
Merge 1.18 into 1.19.2 2023-09-22 22:05:51 -04:00
embeddedt
d32ba39c1d
Merge commit '7b1d9ff8bba98ed75aa250a19f54727f4279dede' into 1.18 2023-09-22 22:05:42 -04:00
embeddedt
0c65c2cf17
Merge commit '5c21a98c7f44b34f76eb824ff7e866943d8e1265' into 1.18 2023-09-22 22:05:37 -04:00
embeddedt
7b1d9ff8bb
Improve Async Locator backport for 1.16 2023-09-22 22:05:10 -04:00
embeddedt
5c21a98c7f
New stylized logo by CelestialAbyss 2023-09-22 22:05:10 -04:00
embeddedt
88d56c451e Merge 1.19.4 into 1.20 2023-09-20 17:58:55 -04:00
embeddedt
ec6de638a2 Merge 1.19.2 into 1.19.4 2023-09-20 17:58:53 -04:00
embeddedt
17e3b40bf9 Merge 1.18 into 1.19.2 2023-09-20 17:58:52 -04:00
embeddedt
0aabad688b Merge 1.16 into 1.18 2023-09-20 17:58:50 -04:00
embeddedt
7ff300d8df Add Vampirism to mods requiring fallback model iterator
Related: #242
2023-09-20 17:58:25 -04:00
其智乃反不能及
bdd12f1802
Update zh_cn.json (#240) 2023-09-18 10:05:22 -04:00
embeddedt
bd1ca9ce94
Disable reduce_blockstate_cache_rebuilds if dev env is not Mojmap
This is simpler than implementing remapping

Closes #229
2023-09-17 13:00:54 -04:00
embeddedt
eff07204ea
Merge 1.19.4 into 1.20 2023-09-17 12:33:57 -04:00
embeddedt
4a90be9bc7
Merge 1.19.2 into 1.19.4 2023-09-17 12:33:56 -04:00
embeddedt
90f6e9b60e
Merge 1.18 into 1.19.2 2023-09-17 12:33:55 -04:00
embeddedt
8b0158b044
Merge 1.16 into 1.18 2023-09-17 12:33:54 -04:00
embeddedt
fe942c90df
More documentation
Related: #232
2023-09-17 12:30:41 -04:00
embeddedt
7d9f110f27
Fix use of relative paths for changelog 2023-09-17 12:30:41 -04:00
embeddedt
e9f6f3d953 Merge 1.19.4 into 1.20 2023-09-15 09:40:55 -04:00
embeddedt
2a6be9f9e6 Merge 1.19.2 into 1.19.4 2023-09-15 09:40:54 -04:00
embeddedt
31fc5961d8 Merge 1.18 into 1.19.2 2023-09-15 09:40:53 -04:00
embeddedt
412a8c4aec Merge 1.16 into 1.18 2023-09-15 09:40:52 -04:00
embeddedt
a0c5c90c8d Prevent crash with mods calling getFluidState recursively
The returned fluid is meaningless, but vanilla doesn't crash here

Fixes #238
2023-09-15 09:32:30 -04:00
embeddedt
e94f1481ae
Don't use Parchment in testmod 2023-09-15 09:23:48 -04:00
embeddedt
60491a9c69
Update gradle.yml 2023-09-13 21:50:46 -04:00
embeddedt
22559131cc
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-31 11:35:57 -04:00
embeddedt
8b0b0759ef
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-31 11:33:23 -04:00
embeddedt
375c978eb4
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-31 11:30:51 -04:00
embeddedt
3beef4df08
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-31 11:24:08 -04:00
embeddedt
dc42bda09d
Move shared build code out of rootProject build.gradle 2023-08-31 11:09:56 -04:00
embeddedt
6198f0c9d3
Merge 1.19.4 into 1.20 2023-08-31 07:57:26 -04:00
embeddedt
5f45f612a3
Merge 1.19.2 into 1.19.4 2023-08-31 07:57:25 -04:00
embeddedt
adac1125e8
Merge 1.18 into 1.19.2 2023-08-31 07:57:24 -04:00
embeddedt
06f5441399
Merge 1.16 into 1.18 2023-08-31 07:57:23 -04:00
Phoenix-Starlight
5fef7dc66b
Fix dynamic resources ModelManager leak (#231)
The opened BufferedReader was not being closed, and apparently the cleaner/finalize mechanism doesn't exist for it
2023-08-31 07:56:38 -04:00
embeddedt
fcde6104eb
Possible NPE fixes for KubeJS 2023-08-30 19:39:41 -04:00
embeddedt
20a15a587c
Create CONTRIBUTING.md [skip ci] 2023-08-30 19:22:15 -04:00
embeddedt
4b560c7d3d
Merge 1.19.4 into 1.20 2023-08-29 15:17:06 -04:00
embeddedt
ecb3863410
Merge 1.19.2 into 1.19.4 2023-08-29 15:17:05 -04:00
embeddedt
eac4ddac4c
Merge 1.18 into 1.19.2 2023-08-29 15:17:04 -04:00
embeddedt
987c5dc321
Change mixin priority 2023-08-29 15:16:54 -04:00
embeddedt
ec99687702
Fix Canary compat 2023-08-29 15:08:50 -04:00
embeddedt
501d24ddfd
Merge 1.19.4 into 1.20 2023-08-29 14:39:57 -04:00
embeddedt
2aab73220c
Merge 1.19.2 into 1.19.4 2023-08-29 14:39:56 -04:00
embeddedt
4f7a4cbf95
Merge 1.18 into 1.19.2 2023-08-29 14:39:55 -04:00
embeddedt
3bf2c86b07
Merge 1.16 into 1.18 2023-08-29 14:39:54 -04:00
embeddedt
eadb19d386
Allow Model Loading API to inject and load extra models 2023-08-25 15:00:21 -04:00
embeddedt
ce7b7cbaf2 Merge 1.19.4 into 1.20 2023-08-24 21:47:04 -04:00
embeddedt
fa5b947442 Merge 1.19.2 into 1.19.4 2023-08-24 21:47:03 -04:00
embeddedt
11f1be0d2c Merge 1.18 into 1.19.2 2023-08-24 21:47:02 -04:00
embeddedt
4418dd2eab Fix misapplied Forge patch that no longer checks currently loading chunk 2023-08-24 21:46:23 -04:00
embeddedt
8081e0db02
BLS compat improvement 2023-08-22 21:01:09 -04:00
embeddedt
73d2a4405d
Improve performance of async handoff 2023-08-20 20:51:46 -04:00
embeddedt
8d766a8cc8
Avoid calling createCapabilities many times, mark mixin as client-only 2023-08-20 20:35:20 -04:00
embeddedt
fe8d0434c5
Rename feature 2023-08-20 20:27:10 -04:00
embeddedt
ae59c2496e
Show mod names and progress during registry events 2023-08-20 20:26:26 -04:00
embeddedt
a19d519b4b
Temporarily shift splash screen control to background thread during registry events 2023-08-20 20:01:36 -04:00
embeddedt
f7097ec394
Update Forge target to 47.1.3 2023-08-20 19:58:07 -04:00
embeddedt
16e1e37fd9
Merge 1.19.4 into 1.20 2023-08-20 16:50:45 -04:00
embeddedt
48c9d401db
Merge 1.19.2 into 1.19.4 2023-08-20 16:50:44 -04:00
embeddedt
37078ef962
Merge 1.18 into 1.19.2 2023-08-20 16:50:44 -04:00
embeddedt
5ad333703f
Merge 1.16 into 1.18 2023-08-20 16:50:43 -04:00
其智乃反不能及
54625c1a40
Update zh_cn.json (#223) 2023-08-20 14:24:58 -04:00
embeddedt
e1ea900ffb
Disable compress_biome_container when Modern Beta is installed
Related: #224
2023-08-20 14:21:11 -04:00
embeddedt
26bdb57972
Merge 1.19.4 into 1.20 2023-08-20 13:15:52 -04:00
embeddedt
c34974a555
Merge 1.19.2 into 1.19.4 2023-08-20 13:15:52 -04:00
embeddedt
ffa76b238e
Merge 1.18 into 1.19.2 2023-08-20 13:15:51 -04:00
embeddedt
ab4ded89e3
Merge 1.16 into 1.18 2023-08-20 13:15:50 -04:00
embeddedt
1f7da1d650
Fix mixin scanning fix not actually working due to typo when backporting 2023-08-20 13:15:22 -04:00
embeddedt
29e3d38c55
Merge 1.19.4 into 1.20 2023-08-19 19:32:24 -04:00
embeddedt
0df87a9f83
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-19 19:32:16 -04:00
embeddedt
26758e18b2
Merge 1.18 into 1.19.2 2023-08-19 19:30:55 -04:00
embeddedt
e8926c334c
Merge 1.16 into 1.18 2023-08-19 19:30:54 -04:00
embeddedt
dcbc3e033a
Tweak injection point of faster_item_rendering 2023-08-19 19:30:30 -04:00
embeddedt
501e498175
Merge 1.19.4 into 1.20 2023-08-19 19:19:59 -04:00
embeddedt
f8a35c5884
Merge 1.19.2 into 1.19.4 2023-08-19 19:19:58 -04:00
embeddedt
0b685d843e
Merge 1.18 into 1.19.2 2023-08-19 19:19:25 -04:00
embeddedt
89700c1e2e
Merge 1.16 into 1.18 2023-08-19 19:19:24 -04:00
embeddedt
58b7b0da0f
Fix MI pipes being invisible when faster_item_rendering is enabled 2023-08-19 19:18:52 -04:00
embeddedt
b171d4bf19
Merge 1.19.4 into 1.20 2023-08-19 14:59:19 -04:00
embeddedt
e827fba754
Merge 1.19.2 into 1.19.4 2023-08-19 14:59:19 -04:00
embeddedt
fac858e3cb
Merge 1.18 into 1.19.2 2023-08-19 14:59:18 -04:00
embeddedt
8290964c31
Merge 1.16 into 1.18 2023-08-19 14:59:17 -04:00
embeddedt
383d40e420
Detect mixins with calls to other merged methods
Related: #222
2023-08-19 14:59:11 -04:00
羊羽ちゃん
37724d7696
Update Japanese (#221) 2023-08-18 22:08:17 -04:00
embeddedt
9f5ccf28df
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-18 15:39:58 -04:00
embeddedt
6536c49c3c
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-18 15:39:03 -04:00
embeddedt
59abaf6a7f
Merge 1.18 into 1.19.2 2023-08-18 15:37:02 -04:00
embeddedt
2a1685a2cb
Fix merge error 2023-08-18 15:36:50 -04:00
embeddedt
a35c605e73
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-18 15:34:55 -04:00
embeddedt
4dcb94e6a5
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-18 15:33:18 -04:00
embeddedt
ec66fbc05c
Add wiki button
Related: #202
2023-08-18 15:31:31 -04:00
embeddedt
e946cc896a
Merge 1.19.4 into 1.20 2023-08-18 15:16:55 -04:00
embeddedt
a1e8838aee
Merge 1.19.2 into 1.19.4 2023-08-18 15:16:54 -04:00
embeddedt
9390f7fca9
Merge 1.18 into 1.19.2 2023-08-18 15:16:53 -04:00
embeddedt
7490809a42
Merge 1.16 into 1.18 2023-08-18 15:16:52 -04:00
embeddedt
45f92f7fce
Disable config reload message for now
There isn't a good way to print this in a way that will catch the
modification in all scenarios, and that doesn't annoy the user
2023-08-18 15:16:20 -04:00
embeddedt
bc7fb1e6d4
Merge 1.19.4 into 1.20 2023-08-18 14:39:26 -04:00
embeddedt
2ee1ef13ec
Merge 1.19.2 into 1.19.4 2023-08-18 14:39:25 -04:00
embeddedt
7552199f5e
Merge 1.18 into 1.19.2 2023-08-18 14:39:24 -04:00
embeddedt
73c80d0603
Merge 1.16 into 1.18 2023-08-18 14:39:24 -04:00
embeddedt
fa9103fb06
Convert milliseconds to nanoseconds correctly 2023-08-18 14:39:07 -04:00
embeddedt
9964693050
Merge 1.19.4 into 1.20 2023-08-18 14:35:25 -04:00
embeddedt
c51133f2c3
Merge 1.19.2 into 1.19.4 2023-08-18 14:35:25 -04:00
embeddedt
da944c330b
Merge 1.18 into 1.19.2 2023-08-18 14:35:24 -04:00
embeddedt
6b1f5232fa
Merge 1.16 into 1.18 2023-08-18 14:35:23 -04:00
embeddedt
672ca92aab
Show time to bootstrap stage on Forge 2023-08-18 14:35:15 -04:00
embeddedt
4aebee53ac
Merge 1.19.4 into 1.20 2023-08-18 14:19:48 -04:00
embeddedt
7faa29e84b
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-18 14:17:00 -04:00
embeddedt
349f58b807
Merge 1.18 into 1.19.2 2023-08-18 14:14:33 -04:00
embeddedt
1f5763bdf0
Merge 1.16 into 1.18 2023-08-18 14:14:32 -04:00
embeddedt
744622b81d
Create FUNDING.yml [skip ci] 2023-08-16 21:58:26 -04:00
TheBossMagnus
12aa14cc54
Italian Localization (#217) 2023-08-16 16:04:09 -04:00
embeddedt
3acaa1dd49
Merge 1.18 into 1.19.2 2023-08-16 08:54:15 -04:00
embeddedt
2e8b11de93
Merge 1.16 into 1.18 2023-08-16 08:54:14 -04:00
embeddedt
2629cd484a
Add runes/ to legacy texture folder list 2023-08-16 08:48:30 -04:00
embeddedt
74c9f684e6
Merge 1.19.4 into 1.20 2023-08-15 22:03:47 -04:00
embeddedt
18722beebd
Merge 1.19.2 into 1.19.4 2023-08-15 22:03:46 -04:00
embeddedt
6b7a300a2e
Merge 1.18 into 1.19.2 2023-08-15 22:03:46 -04:00
embeddedt
1ce0a833e9
Merge 1.16 into 1.18 2023-08-15 22:03:45 -04:00
embeddedt
b54c6751a4
Suppress dots and header in stacktraces where possible
Requested by TelepathicGrunt (and frankly, why didn't I think of this earlier...)
2023-08-15 22:03:07 -04:00
embeddedt
6e00010e9a
Merge 1.19.4 into 1.20 2023-08-15 21:21:18 -04:00
embeddedt
9325a8c892
Update mixin target 2023-08-15 21:21:10 -04:00
embeddedt
00481145b6
Merge 1.19.4 into 1.20 2023-08-15 21:19:16 -04:00
embeddedt
a918c09543
Merge 1.19.2 into 1.19.4 2023-08-15 21:19:15 -04:00
embeddedt
a06fca791a
Fix Forge experimental world suppression not working on first reopen 2023-08-15 21:18:39 -04:00
embeddedt
ef341932a3
Merge 1.19.4 into 1.20 2023-08-15 13:08:56 -04:00
embeddedt
2e272f9b18
Merge 1.19.2 into 1.19.4 2023-08-15 13:08:55 -04:00
embeddedt
1580e757ed
Merge 1.18 into 1.19.2 2023-08-15 13:08:54 -04:00
embeddedt
ed0460747c
Update world leak patch to 1.18 2023-08-15 13:08:42 -04:00
embeddedt
fa8d83a21a
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-15 13:04:49 -04:00
embeddedt
6908f14905
Mitigation for memory usage from leaked client worlds 2023-08-15 13:04:04 -04:00
embeddedt
6fa24ec171
Change CanonizingStringMap to use weak interner 2023-08-15 12:23:43 -04:00
embeddedt
dcb72dfa62
Add more links to Mod Menu 2023-08-14 11:25:23 -04:00
embeddedt
5203985a25
Merge 1.19.4 into 1.20 2023-08-13 16:38:04 -04:00
embeddedt
351e4d3fc6
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-13 16:37:56 -04:00
embeddedt
5079ce65ba
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-13 16:36:02 -04:00
embeddedt
47a04c66f1
Fix chunk future chain not being bypassed during entity load
Backport of https://github.com/neoforged/NeoForge/pull/99
2023-08-13 16:34:23 -04:00
embeddedt
53cc4584f4
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-13 16:15:02 -04:00
embeddedt
3492f9a4ee
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-13 16:12:32 -04:00
embeddedt
d9184833ec
Introduce MixinExtras 2023-08-13 15:53:20 -04:00
embeddedt
0aef731a79
Update SafeBlockGetter for 1.18 world height 2023-08-13 13:41:36 -04:00
embeddedt
ca51ceba6a
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-13 13:40:52 -04:00
embeddedt
d7b2f5b75b
Prevent mods from causing deadlocks in BlockState.getOffset
If this method is called with a ServerLevel, we switch the BlockGetter
for a safe wrapper that will only work on loaded chunks

Related: https://github.com/N1nn1/twigs/issues/6
Related: https://github.com/N1nn1/etcetera/issues/28
2023-08-13 13:39:24 -04:00
其智乃反不能及
33e43f5b8f
Update zh_cn.json (#211) 2023-08-13 12:24:33 -04:00
embeddedt
f9ebcb6b98
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-12 21:23:46 -04:00
embeddedt
fa47e923f0
Better compatibility with mods that inject into initCache 2023-08-12 21:19:43 -04:00
embeddedt
97b6672610
Fix MC-251068 2023-08-12 16:48:24 -04:00
embeddedt
05cc25c761
Merge 1.19.4 into 1.20 2023-08-12 12:13:46 -04:00
embeddedt
d13cfd5ca8
Merge 1.19.2 into 1.19.4 2023-08-12 12:13:45 -04:00
embeddedt
4399eeb67f
Merge 1.16 into 1.18 2023-08-12 12:13:44 -04:00
embeddedt
dd4d316a66
Merge 1.18 into 1.19.2 2023-08-12 12:13:44 -04:00
embeddedt
2f92dbe12c
Update mixin 2023-08-12 12:13:31 -04:00
embeddedt
1ad6ec4bd1
Remove Werror now that almost all warnings are addressed 2023-08-12 12:09:52 -04:00
embeddedt
fab831f143
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-12 12:09:38 -04:00
embeddedt
073b8cb9de
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-12 12:09:21 -04:00
embeddedt
b776587f2d
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-12 12:02:43 -04:00
embeddedt
70a2a2194f
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-12 11:54:31 -04:00
embeddedt
b87c615e5d
Adjust mixin config 2023-08-12 11:51:28 -04:00
embeddedt
d1c9be8900
Clean up warnings 2023-08-12 11:41:04 -04:00
embeddedt
b5b46888af
Change resource key name
Easier to add typo here than fix typo in the other file and deal
with merge conflicts
2023-08-12 11:32:00 -04:00
embeddedt
df8da0823a
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-12 11:31:45 -04:00
embeddedt
21ee0dc1cf
Add warning for Connectedness and dynamic resources 2023-08-12 11:28:07 -04:00
embeddedt
05e74f4141
Add warning when launched with Continuity and dynamic resources is on 2023-08-12 11:18:41 -04:00
embeddedt
507cc7eb14
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-11 19:55:28 -04:00
embeddedt
fa4d659c5b
Update testmod mixin 2023-08-11 19:52:40 -04:00
embeddedt
74d28ed997
Update mixin 2023-08-11 19:50:33 -04:00
embeddedt
dcad671568
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-11 19:48:12 -04:00
embeddedt
0a18e9c1dc
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-11 19:45:31 -04:00
embeddedt
ca8d290870
Message wording change 2023-08-11 19:45:19 -04:00
embeddedt
e949ed67ef
Merge 1.16 into 1.18 2023-08-11 19:44:22 -04:00
embeddedt
a51b1563b1
Try to make config reload message appear less often
Related: #210
2023-08-11 19:31:36 -04:00
embeddedt
478d003307
Merge 1.18 into 1.19.2 2023-08-11 17:05:32 -04:00
embeddedt
f656aea029
Remove outdated mixin 2023-08-11 17:05:17 -04:00
embeddedt
1e77cccf5a
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-11 17:00:38 -04:00
embeddedt
1a8681e15d
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-11 16:53:41 -04:00
embeddedt
721645f88f
Add IgnoreOutsideDev marker to forgotten mixin 2023-08-11 16:53:21 -04:00
embeddedt
d92e48e1aa
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-11 16:53:00 -04:00
embeddedt
7645a43538
Add hacky solution for "runtime" remapping in dev 2023-08-11 16:47:38 -04:00
embeddedt
0c82223248
Fix Custom Machinery models 2023-08-11 16:44:51 -04:00
embeddedt
4d3aaceb9c
Fix crash if FerriteCore detection fails in neighbour table mixin 2023-08-11 16:18:07 -04:00
embeddedt
8b4c5d4c7a
C U B E 2023-08-10 22:44:06 -04:00
embeddedt
cb6ff1d68b
Add API to skip blockstate/model scanning for specific models 2023-08-10 22:43:45 -04:00
embeddedt
8b698452fd
Compact Mojang registries (not available yet) 2023-08-10 22:42:30 -04:00
embeddedt
e9ff7d7ba1
Allow setting config options via JVM properties 2023-08-10 20:31:39 -04:00
embeddedt
34179fb313
Implement blast_search_trees on Fabric (dummy mode only) 2023-08-10 20:30:55 -04:00
embeddedt
be4a6abc81
Port testmod to 1.20 2023-08-10 11:07:39 -04:00
embeddedt
770969ec5c
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-10 10:54:46 -04:00
embeddedt
24e014f326
Update testmod to 1.19.4 2023-08-10 10:54:27 -04:00
embeddedt
a506f8785e
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-10 10:47:59 -04:00
embeddedt
f1c0d02bc3
Update testmod to 1.19.2 2023-08-10 10:47:46 -04:00
embeddedt
b8a4e13284
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-10 10:38:32 -04:00
embeddedt
d52e6467ac
Update testmod to 1.18 2023-08-10 10:37:59 -04:00
embeddedt
0779058ca5
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-10 09:48:27 -04:00
embeddedt
6c85449b63
Rewrite testmod debug renderer to be cooler 2023-08-09 22:48:30 -04:00
embeddedt
365eb80a28
Testmod for many blocks/items test 2023-08-09 21:45:21 -04:00
embeddedt
fed0392ddc
Introduce test mod 2023-08-09 20:07:59 -04:00
embeddedt
cac291df47
Add minor Brigadier patch to limit suggestion count to 10000
Fixes lag when there are many items registered
2023-08-09 19:51:59 -04:00
embeddedt
712409b4e1
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-09 17:20:45 -04:00
embeddedt
571d3bd5e2
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-09 17:14:22 -04:00
embeddedt
26bbe781a0
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-09 17:11:01 -04:00
embeddedt
2844c97170
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-09 17:07:47 -04:00
embeddedt
5e7d6642a7
Implement minor memory usage optimization for environments without FerriteCore
This is "FerriteCore at home", used to assist with the large registry
tests
2023-08-09 15:46:40 -04:00
embeddedt
fbfaa178e3
Allow disabling Fabric API for runtime in dev 2023-08-09 15:45:14 -04:00
embeddedt
27c2a674cf
Allow only applying mixins when mods aren't present 2023-08-09 13:16:51 -04:00
embeddedt
f488df2d45
Minor buildscript improvements 2023-08-09 12:42:32 -04:00
embeddedt
7b23053da0
Skip generating remapJar for common project 2023-08-09 12:42:32 -04:00
embeddedt
590c939778
Increase default heap from 512MB to 1GB to avoid issues with Fabric remapper
This is still substantially less than the original 4GB
2023-08-09 12:42:32 -04:00
其智乃反不能及
eec5ec7efb
Update zh_cn.json (#207) 2023-08-09 10:05:58 -04:00
羊羽ちゃん
22f22b9317
Add Japanese translation (#206) 2023-08-08 18:18:48 -04:00
embeddedt
32e246885b Merge 1.19.4 into 1.20 2023-08-08 18:17:36 -04:00
embeddedt
824deddb46 Merge 1.19.2 into 1.19.4 2023-08-08 18:17:35 -04:00
embeddedt
866fcebf2e Merge 1.18 into 1.19.2 2023-08-08 18:17:33 -04:00
embeddedt
27c7400f34 Merge 1.16 into 1.18 2023-08-08 18:17:32 -04:00
embeddedt
c1182944f3 Redirect fetchChoiceType directly in vanilla code instead of fully disabling it
Should address #204
2023-08-08 18:17:01 -04:00
embeddedt
180ac925f7
Merge 1.19.4 into 1.20 2023-08-08 10:27:08 -04:00
embeddedt
bb115f1d2f
Merge 1.19.2 into 1.19.4 2023-08-08 10:27:08 -04:00
embeddedt
6c465c7182
Update use of Component 2023-08-08 10:26:57 -04:00
embeddedt
46be9a801c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-08 10:26:30 -04:00
embeddedt
b8d0e5fee2
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-08 10:26:09 -04:00
embeddedt
e2aa482187
Try to provide more guidance to users when reloading configs 2023-08-08 10:24:48 -04:00
embeddedt
8f31048619
Merge 1.19.4 into 1.20 2023-08-07 21:53:31 -04:00
embeddedt
52b66db729
Merge 1.19.2 into 1.19.4 2023-08-07 21:53:30 -04:00
embeddedt
39e8e4a2ae
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-07 21:53:21 -04:00
embeddedt
8875710f3d
Use client commands on 1.18+ for /mfrc 2023-08-07 21:51:54 -04:00
embeddedt
858551411b
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-07 11:22:35 -04:00
embeddedt
4ed5e8a434
Update CTM version 2023-08-07 11:22:29 -04:00
embeddedt
e0a170db92
Fix CTM block models not working (only item models worked) 2023-08-07 11:21:47 -04:00
embeddedt
fa17a5f745
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-07 10:47:02 -04:00
embeddedt
dc59c9bf0c
Update CTM integration for 1.19.4+ 2023-08-07 10:46:19 -04:00
embeddedt
823fa259e9
Merge 1.19.4 into 1.20 2023-08-05 19:43:20 -04:00
embeddedt
47491fe749
Merge 1.18 into 1.19.2 2023-08-05 19:43:19 -04:00
embeddedt
c81327fdb5
Merge 1.19.2 into 1.19.4 2023-08-05 19:43:19 -04:00
embeddedt
a82b728d98
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-05 19:43:11 -04:00
embeddedt
795aca19e0
Don't enable blast_search_trees with REI present on 1.16 2023-08-05 19:42:34 -04:00
embeddedt
ec5b92dd7a
Don't trigger full blockstate cache rebuilds when requesting fluid
This causes mods to prematurely rebuild the whole cache, which
is not what we want
2023-08-05 19:38:45 -04:00
embeddedt
8a0ff999bd
Merge 1.19.4 into 1.20 2023-08-05 12:52:06 -04:00
embeddedt
7b18bcafd6
Merge 1.19.2 into 1.19.4 2023-08-05 12:52:05 -04:00
embeddedt
1931101545
Merge 1.18 into 1.19.2 2023-08-05 12:52:04 -04:00
embeddedt
ae3eab8320
Merge 1.16 into 1.18 2023-08-05 12:52:03 -04:00
embeddedt
abb8cbd23f
Make sure missing model never becomes null 2023-08-05 12:26:18 -04:00
embeddedt
5165cf20c8
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-05 12:18:45 -04:00
embeddedt
2cb5acb9f9
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-05 12:17:50 -04:00
embeddedt
605058522e
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-05 12:11:30 -04:00
embeddedt
431231c4ee
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-05 12:10:53 -04:00
embeddedt
41ca9fc251
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-05 12:07:53 -04:00
embeddedt
371e5119f1
Never return a non-null model if it was top level in vanilla 2023-08-05 12:07:21 -04:00
embeddedt
1a25984e88
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-05 11:46:24 -04:00
embeddedt
c1277a2bf5
Make a copy of the top-level model list when collecting materials
This should prevent CMEs if material collection triggers a model
load
2023-08-05 11:42:44 -04:00
embeddedt
3df41090e4
Remove resource_key_equality patch as NeoForge fixes it in 1.20+ 2023-08-04 10:05:55 -04:00
embeddedt
1b73ded110
Merge 1.19.4 into 1.20 2023-08-04 09:44:06 -04:00
embeddedt
6fe2674f5b
Merge 1.19.2 into 1.19.4 2023-08-04 09:44:05 -04:00
embeddedt
c3eb1369ac
Merge 1.18 into 1.19.2 2023-08-04 09:44:04 -04:00
embeddedt
9c380e52d1
Merge 1.16 into 1.18 2023-08-04 09:44:03 -04:00
embeddedt
e04b05dcc8
Don't return null for models we claim are in the faked model registry 2023-08-04 09:42:07 -04:00
embeddedt
c2695b1180
Merge 1.19.4 into 1.20 2023-08-03 20:04:49 -04:00
embeddedt
d3884d764d
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-03 20:02:55 -04:00
embeddedt
f05d33969f
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-03 20:02:15 -04:00
embeddedt
f225e6cf75
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-03 19:57:15 -04:00
embeddedt
14170ade1f
Implement /mfrc and /mfsrc commands to reload configs on client/server respectively 2023-08-03 19:45:37 -04:00
embeddedt
c8749940f7
Show log message after reloads are processed 2023-08-03 18:09:57 -04:00
embeddedt
dbff17a1ff
Better fix for config corruption
Defer posting of all config reload events to the main thread, and
don't process any until after the launch finishes. This should
hopefully fix some synchronization issues
2023-08-03 18:08:46 -04:00
embeddedt
1989f122c6
Remove locking system for Night Config files
This can cause deadlocks if mods themselves are also using their
own internal locks (Sophisticated Backpacks does this on 1.16 by
using a CHM)

This system will be replaced by a command/keybind to manually reload
configs
2023-08-03 17:54:30 -04:00
embeddedt
4972081d8a
Forcefully inject access transformers from mods even if a load error occurs
Related: https://github.com/neoforged/NeoForge/issues/43
2023-08-03 17:04:41 -04:00
embeddedt
331ad00758
Merge 1.19.4 into 1.20 2023-08-03 17:01:14 -04:00
embeddedt
b64fefa73c
Merge 1.19.2 into 1.19.4 2023-08-03 17:01:13 -04:00
embeddedt
c5f73c5e26
Merge 1.18 into 1.19.2 2023-08-03 17:01:12 -04:00
embeddedt
022367c8d6
Merge 1.16 into 1.18 2023-08-03 17:01:11 -04:00
embeddedt
5853f9b034
Fix NPE on Forge error screen 2023-08-03 17:00:30 -04:00
embeddedt
eac9edb13a
Fix Forge overriding ResourceKey.equals() with a slower implementation 2023-08-03 16:29:13 -04:00
embeddedt
d5a9f68575
Merge 1.19.4 into 1.20 2023-08-03 13:14:38 -04:00
embeddedt
3caba87924
Merge 1.19.2 into 1.19.4 2023-08-03 13:14:37 -04:00
embeddedt
f469d591b8
Remove item quirk entirely on 1.19+ 2023-08-03 13:13:09 -04:00
embeddedt
72e3a115d6
Move item filling quirk to correct vanilla location on 1.19+ 2023-08-03 13:08:18 -04:00
embeddedt
df854f333c
Merge 1.19.4 into 1.20 2023-08-03 12:21:04 -04:00
embeddedt
23605b2a80
Merge 1.19.2 into 1.19.4 2023-08-03 12:21:03 -04:00
embeddedt
33fa870f04
Merge 1.18 into 1.19.2 2023-08-03 12:21:02 -04:00
embeddedt
f1e2b21d8f
Merge 1.16 into 1.18 2023-08-03 12:21:01 -04:00
embeddedt
fac9f6fac9
Move to 4-character git hash for dev builds
Needed in order to fit the whole version into 32 characters
2023-08-03 12:20:19 -04:00
embeddedt
13aaab4798
Merge 1.19.4 into 1.20 2023-08-03 11:54:01 -04:00
embeddedt
0f08491f50
Merge 1.19.2 into 1.19.4 2023-08-03 11:54:00 -04:00
embeddedt
cfef1d62e6
Merge 1.18 into 1.19.2 2023-08-03 11:53:59 -04:00
embeddedt
d9e429bfb4
Merge 1.16 into 1.18 2023-08-03 11:53:58 -04:00
embeddedt
81ebcc8186
Link to wiki changelog 2023-08-03 11:53:49 -04:00
embeddedt
ac827a0f42
Fix branch list including dev branches 2023-08-03 11:29:04 -04:00
embeddedt
19593b5574
Merge 1.19.4 into 1.20 2023-08-03 11:27:54 -04:00
embeddedt
89abcdb17c
Merge 1.19.2 into 1.19.4 2023-08-03 11:27:53 -04:00
embeddedt
89c7e58101
Merge 1.18 into 1.19.2 2023-08-03 11:27:52 -04:00
embeddedt
6d53262a9f
Merge 1.16 into 1.18 2023-08-03 11:27:51 -04:00
embeddedt
24792b96cc
Move ModernFix branding to right side of screen 2023-08-03 11:27:32 -04:00
embeddedt
bf5ca2f3cd
Merge 1.19.4 into 1.20 2023-08-02 22:18:19 -04:00
embeddedt
23ffdabcc4
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-02 22:18:13 -04:00
embeddedt
200cf00fe4
Merge 1.18 into 1.19.2 2023-08-02 22:08:41 -04:00
embeddedt
12c2214432
Merge 1.16 into 1.18 2023-08-02 22:08:15 -04:00
embeddedt
df9d2fbe2f
Remove default impl from ModernFixPlatformHooks 2023-08-02 22:08:01 -04:00
embeddedt
fa6b93fad2
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-02 19:51:25 -04:00
embeddedt
942b7cbb43
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-02 19:41:34 -04:00
embeddedt
88e0016e31
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-02 19:35:34 -04:00
embeddedt
54dda96849
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-02 19:21:23 -04:00
embeddedt
acec6112cb
Remove all remaining hard dependency on Fabric API modules 2023-08-02 19:15:34 -04:00
embeddedt
7e777625a5
Remove dependency on fabric-lifecycle-events 2023-08-02 19:05:39 -04:00
embeddedt
fe818eb7e6
Replace ServerLifecycleEvents usage with mixin 2023-08-02 19:00:28 -04:00
embeddedt
82218ce18f
Fix world load time being printed if it wasn't actually set 2023-08-02 17:16:42 -04:00
embeddedt
5bd5c8289c
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-02 16:41:39 -04:00
embeddedt
26998e912b
Mark fluidState redirect as optional for old Lithium/VMP versions 2023-08-02 16:41:23 -04:00
embeddedt
02fd57f9a4
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-02 16:31:51 -04:00
embeddedt
f76ca049cc
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-02 16:31:07 -04:00
embeddedt
f4ab932924
Fix incorrect return value from deduplicated postprocessing map 2023-08-02 16:30:18 -04:00
embeddedt
d77946a5ab
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-02 16:23:22 -04:00
embeddedt
0d190a4c80
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-02 16:17:45 -04:00
embeddedt
201db412a4
Rewrite tracking code for game load/world join timing 2023-08-02 16:08:36 -04:00
embeddedt
a1a441d397
Merge 1.19.4 into 1.20 2023-08-02 15:45:57 -04:00
embeddedt
ba9ba01dfe
Merge 1.19.2 into 1.19.4 2023-08-02 15:45:56 -04:00
embeddedt
ad19e11213
Merge 1.18 into 1.19.2 2023-08-02 15:45:55 -04:00
embeddedt
2ff09ef382
Merge 1.16 into 1.18 2023-08-02 15:45:54 -04:00
embeddedt
62ea11ef7b
Avoid hardcoding projects to include 2023-08-02 15:32:59 -04:00
embeddedt
2c1e036857
Bail out early if empty map is passed to CanonizingStringMap.putAll 2023-08-02 14:59:52 -04:00
embeddedt
11fd512c5e
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-08-02 11:56:36 -04:00
embeddedt
7d6fa48a74
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-08-02 11:55:34 -04:00
embeddedt
31b5114a8d
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-08-02 11:50:45 -04:00
embeddedt
1cd7b7e0c7
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-08-02 11:48:27 -04:00
embeddedt
1d1e7b640a
Call Item.fillItemCategory() on all items when removing creative search trees
This fixes obscure issues caused by mods that accidentally rely on that
method to initialize other classes

Resolves https://github.com/Shadows-of-Fire/GatewaysToEternity/issues/29
2023-08-02 09:33:05 -04:00
embeddedt
db5f99f3f6
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-31 22:25:50 -04:00
embeddedt
25dc08eb79
Make dynamic codecs actually work 2023-07-31 22:18:26 -04:00
embeddedt
11fe75578c
Add option to generate block codecs on the fly instead of at startup 2023-07-31 21:51:45 -04:00
embeddedt
c8c316a06f
Enforce 512MB heap for dev runs 2023-07-31 15:45:33 -04:00
embeddedt
156f0a10cb
Merge 1.19.4 into 1.20 2023-07-31 15:35:57 -04:00
embeddedt
9c0c2416d6
Update mixin target to 1.19.4 2023-07-31 15:35:43 -04:00
embeddedt
858325e40d
Merge 1.19.4 into 1.20 2023-07-31 15:34:04 -04:00
embeddedt
c7604672fc
Merge 1.19.2 into 1.19.4 2023-07-31 15:34:03 -04:00
embeddedt
49f9644714
Merge 1.18 into 1.19.2 2023-07-31 15:34:02 -04:00
embeddedt
49fa5bf14a
Lock FerriteCore deduplication fix to dev only 2023-07-31 15:23:37 -04:00
embeddedt
e540c9d58d
Improve FerriteCore memory usage for blocks with one state 2023-07-31 14:23:14 -04:00
embeddedt
9d6f51695a
Update MappedRegistry mixin for 1.18 2023-07-31 13:14:48 -04:00
embeddedt
2bc5b39895
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-31 13:14:25 -04:00
embeddedt
3e4f1ab23a
Improve registry performance with large entry counts 2023-07-31 13:13:39 -04:00
embeddedt
ec2f6e8490
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-31 11:21:39 -04:00
embeddedt
472531d1b6
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-31 11:17:33 -04:00
embeddedt
4fe235cdbd
Workaround for mods instantiating PathResourcePack incorrectly 2023-07-31 11:14:38 -04:00
embeddedt
e3051d6427
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-30 20:25:34 -04:00
embeddedt
467d4818d8
Default reuse_datapacks to false
This optimization is only meaningful when swapping worlds (probably
uncommon among players) and it's hard to predict what mods will have
issues. Can be enabled by modpack devs for their own packs/testing
if they wish
2023-07-30 20:19:59 -04:00
embeddedt
84bd756cdf
Merge 1.19.4 into 1.20 2023-07-30 13:11:12 -04:00
embeddedt
1a2981e5f1
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-30 13:09:42 -04:00
embeddedt
cedd9ac79b
Fix merge error 2023-07-30 13:09:32 -04:00
embeddedt
94f7b9295d
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-30 12:59:23 -04:00
embeddedt
78ff767b9e
Merge 1.18 into 1.19.2 2023-07-30 12:57:40 -04:00
embeddedt
762728c0a6
Merge 1.16 into 1.18 2023-07-30 12:57:39 -04:00
embeddedt
377f59847e
Skip dynamic resources single blockstate optimization when outside world
This should improve performance of model baking events during launch
2023-07-30 12:57:11 -04:00
embeddedt
92a204c253
Make FlagManager patch handle both impls of CoFH Core 2023-07-30 12:57:11 -04:00
其智乃反不能及
2b4199c0a6
Update zh_cn.json (#192) 2023-07-30 12:25:08 -04:00
embeddedt
ee75ef19aa
Clean up dead code 2023-07-29 20:40:50 -04:00
embeddedt
106b3447eb
Switch to Gradle build action 2023-07-29 20:25:19 -04:00
embeddedt
3e3448adb1
Merge 1.19.4 into 1.20 2023-07-28 22:11:28 -04:00
embeddedt
3b3803f57e
Merge 1.19.2 into 1.19.4 2023-07-28 22:11:27 -04:00
embeddedt
26f7ee56ab
Merge 1.18 into 1.19.2 2023-07-28 22:11:27 -04:00
embeddedt
877eeeab5d
Merge 1.16 into 1.18 2023-07-28 22:11:26 -04:00
embeddedt
ce7e796d93
Only collect options from ModernFixEarlyConfig added to the immutable map 2023-07-28 22:11:10 -04:00
embeddedt
3a4b8738fc
Merge 1.19.4 into 1.20 2023-07-28 22:00:23 -04:00
embeddedt
eb1d16740e
Merge 1.19.2 into 1.19.4 2023-07-28 22:00:22 -04:00
embeddedt
f08ca83440
Merge 1.18 into 1.19.2 2023-07-28 22:00:21 -04:00
embeddedt
4d0ac56bd8
Merge 1.16 into 1.18 2023-07-28 22:00:20 -04:00
embeddedt
01bbff42db
Add descriptions of options from newer versions 2023-07-28 22:00:09 -04:00
embeddedt
4697704763
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-07-28 21:45:25 -04:00
embeddedt
4a66802b37
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-28 21:41:44 -04:00
embeddedt
edfa7f0c41
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-28 21:25:46 -04:00
embeddedt
ea593d5002
Remove debug message 2023-07-28 21:21:45 -04:00
embeddedt
88a2b25281
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-28 21:19:40 -04:00
embeddedt
5da78f7565
Render sub-options more nicely 2023-07-28 21:19:15 -04:00
embeddedt
f036350b0a
Add option parenting, gate changes to sub-options when parent option is off 2023-07-28 21:04:53 -04:00
embeddedt
c7b6a9ed9e
Document 1.16 options 2023-07-28 20:38:45 -04:00
embeddedt
5225d89210
Allow choosing custom path to language JSON
Intended for use in dev, to allow pointing at the local 1.16 file
as changes are made
2023-07-28 20:10:10 -04:00
embeddedt
eee22d7e70
Upgrade markdown generation script, can now detect missing descriptions outside game 2023-07-28 19:56:01 -04:00
embeddedt
1884996e53
Merge 1.19.4 into 1.20 2023-07-28 16:40:02 -04:00
embeddedt
451b26fa93
Use Redirect instead of Inject to avoid allocations 2023-07-28 16:38:44 -04:00
embeddedt
4fe3b93fb0
Fix crash on Forge 2023-07-28 16:17:49 -04:00
embeddedt
51bf5890d3
Merge 1.19.4 into 1.20 2023-07-28 16:09:27 -04:00
embeddedt
23e768d629
Spotless 2023-07-28 16:09:21 -04:00
embeddedt
e1fdca5f41
Merge 1.19.4 into 1.20 2023-07-28 16:07:14 -04:00
embeddedt
d3ff2823dc
Update blockstate caching logic for vanilla 1.19.4 changes 2023-07-28 16:05:21 -04:00
embeddedt
4e3dc99479
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-07-27 16:49:05 -04:00
embeddedt
e45acac6b6
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-27 16:48:48 -04:00
embeddedt
3456b8cf23
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-27 16:41:07 -04:00
embeddedt
7b02351f11
Update for 1.18 2023-07-27 16:39:15 -04:00
embeddedt
f3f66e1873
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-27 16:35:06 -04:00
embeddedt
13cc103be2
Switch to compile-only Arch Transformer 2023-07-27 16:26:16 -04:00
embeddedt
ae8c062631
Merge 1.19.4 into 1.20 2023-07-27 16:04:08 -04:00
embeddedt
49c847f38a
Merge 1.19.2 into 1.19.4 2023-07-27 16:04:07 -04:00
embeddedt
0070b8731d
Merge 1.18 into 1.19.2 2023-07-27 16:04:07 -04:00
embeddedt
efd9feca0e
Merge 1.16 into 1.18 2023-07-27 16:04:06 -04:00
embeddedt
2663f5e3f4
Use Forge resource finder for directories instead of MF finder 2023-07-27 13:59:13 -04:00
embeddedt
36ae73316a
Merge 1.19.4 into 1.20 2023-07-27 12:41:43 -04:00
embeddedt
a467d853b0
Rip out wasMissingModel flag, causes more issues than it solves
Logic will be reintroduced later to emulate nullness if Fabric mods
need it
2023-07-27 12:39:26 -04:00
embeddedt
7a648f0c5e
Merge 1.19.4 into 1.20 2023-07-26 22:03:11 -04:00
embeddedt
dabf9fc9cb
Merge 1.18 into 1.19.2 2023-07-26 22:03:10 -04:00
embeddedt
f1fa3a4c9c
Merge 1.19.2 into 1.19.4 2023-07-26 22:03:10 -04:00
embeddedt
cb6926e821
Merge 1.16 into 1.18 2023-07-26 22:03:09 -04:00
embeddedt
213bcd1b2a
Fix getResource("") failing to return valid resource
Fixes #187
2023-07-26 22:02:21 -04:00
embeddedt
33e437f865
Hotfix for CoFH crash
Apparently BooleanSupplier is *not* used
2023-07-26 21:29:33 -04:00
embeddedt
055892cd62
Merge 1.19.4 into 1.20 2023-07-26 09:37:05 -04:00
embeddedt
4da012c871
Merge 1.19.2 into 1.19.4 2023-07-26 09:37:04 -04:00
embeddedt
accd6cb143
Merge 1.16 into 1.18 2023-07-26 09:37:03 -04:00
embeddedt
46fd26a879
Merge 1.18 into 1.19.2 2023-07-26 09:37:03 -04:00
embeddedt
0a9644a8a0
More documentation inside config file 2023-07-26 09:18:05 -04:00
embeddedt
7ad09acec6
Add code to show default values of options (currently unused)
Related: #186
2023-07-26 09:00:45 -04:00
embeddedt
76d1c8e8bd
Merge 1.19.4 into 1.20 2023-07-24 17:19:03 -04:00
embeddedt
5d33805a6f
Merge 1.19.2 into 1.19.4 2023-07-24 17:19:01 -04:00
embeddedt
82445d2ba2
Merge 1.18 into 1.19.2 2023-07-24 17:19:00 -04:00
embeddedt
70fc67199f
Merge 1.16 into 1.18 2023-07-24 17:18:32 -04:00
embeddedt
84e27a7c4d
Fix ender dragon model leaking client world 2023-07-24 17:15:10 -04:00
embeddedt
c41728b97c
Merge 1.19.4 into 1.20 2023-07-24 16:05:01 -04:00
embeddedt
512ed02db2
Merge 1.19.2 into 1.19.4 2023-07-24 16:05:00 -04:00
embeddedt
5babe993df
Merge 1.18 into 1.19.2 2023-07-24 16:04:32 -04:00
embeddedt
6ae1992329
Merge 1.16 into 1.18 2023-07-24 16:04:31 -04:00
embeddedt
7f44701670
Display ModernFix version in early part of log 2023-07-24 16:03:29 -04:00
embeddedt
00fb93a87f
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-24 14:23:57 -04:00
embeddedt
5338cca79b
Adjust patch for 1.18 FlagManager 2023-07-24 14:23:28 -04:00
embeddedt
bb5e71c651
Remove second config warning, now redundant 2023-07-23 20:37:57 -04:00
embeddedt
437eb9f793
Merge 1.19.4 into 1.20 2023-07-23 19:29:31 -04:00
embeddedt
23f5af93ce
Merge 1.19.2 into 1.19.4 2023-07-23 19:29:30 -04:00
embeddedt
55f6e86a56
Merge 1.18 into 1.19.2 2023-07-23 19:29:29 -04:00
embeddedt
aa50c4466e
Fix memory leak in Blueprint
Implements https://github.com/team-abnormals/blueprint/pull/195, which
is still not released on 1.19.2, and may never be released on 1.18.2
2023-07-23 19:28:16 -04:00
embeddedt
1889ef2d8c
Merge 1.19.4 into 1.20 2023-07-23 19:23:27 -04:00
embeddedt
3a96f63798
Merge 1.19.2 into 1.19.4 2023-07-23 19:23:26 -04:00
embeddedt
18db311712
Merge 1.18 into 1.19.2 2023-07-23 19:23:26 -04:00
embeddedt
000e9746ba
Merge 1.16 into 1.18 2023-07-23 19:23:25 -04:00
embeddedt
7fa6c45f07
Fix dragging in ModLoader too early 2023-07-23 19:21:00 -04:00
embeddedt
90f6f6d68d
Merge 1.19.4 into 1.20 2023-07-23 18:33:34 -04:00
embeddedt
b24f82d257
Merge 1.19.2 into 1.19.4 2023-07-23 18:33:33 -04:00
embeddedt
bbcc58f103
Merge 1.18 into 1.19.2 2023-07-23 18:33:26 -04:00
embeddedt
0c3cade976
Merge 1.16 into 1.18 2023-07-23 18:33:25 -04:00
embeddedt
2246b79a85
Fix mod mixins not being disabled if there is an early load error 2023-07-23 18:32:50 -04:00
embeddedt
d3bd8289ec
Support NeoForge on Modrinth 2023-07-22 20:55:48 -04:00
embeddedt
7b670f229e
Merge 1.19.4 into 1.20 2023-07-22 17:07:35 -04:00
embeddedt
b43e7902df
Merge 1.19.2 into 1.19.4 2023-07-22 17:07:34 -04:00
embeddedt
7e2dc67c4e
Merge 1.18 into 1.19.2 2023-07-22 17:07:33 -04:00
embeddedt
e56155f9a0
Merge 1.16 into 1.18 2023-07-22 17:07:32 -04:00
embeddedt
4cdf5e6b3d
Fix missing ClientOnly annotations 2023-07-22 15:35:36 -04:00
embeddedt
821f87b880
Merge 1.19.4 into 1.20 2023-07-22 11:22:05 -04:00
embeddedt
ecbcc6dcaa
Merge 1.19.2 into 1.19.4 2023-07-22 11:22:04 -04:00
embeddedt
cd9adbdf7e
Merge 1.18 into 1.19.2 2023-07-22 11:22:03 -04:00
embeddedt
6efa7f3c5b
Merge 1.16 into 1.18 2023-07-22 11:22:02 -04:00
embeddedt
48409fc572
Fix concurrency issue in CoFH FlagManager
Related: #173
2023-07-22 11:19:20 -04:00
embeddedt
373a10f12c
Fix crash with dynamic resources if mods depend on themselves 2023-07-22 11:06:11 -04:00
embeddedt
18cec4f88d
Fix NPE from config fixers
Related: #174
2023-07-22 09:56:25 -04:00
embeddedt
4031b65099
Merge 1.19.4 into 1.20 2023-07-21 11:15:22 -04:00
embeddedt
bc09210ada
Merge 1.19.2 into 1.19.4 2023-07-21 11:15:22 -04:00
embeddedt
affb24fc11
Merge 1.18 into 1.19.2 2023-07-21 11:15:21 -04:00
embeddedt
b5870b3ae4
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-21 11:15:11 -04:00
embeddedt
edb3da4f74
Fix deadlock with the config fixers by moving all locking to one object 2023-07-21 11:13:56 -04:00
embeddedt
19df78dbe2
Merge 1.19.4 into 1.20 2023-07-21 10:47:57 -04:00
embeddedt
4131f3b2fe
Merge 1.19.2 into 1.19.4 2023-07-21 10:47:56 -04:00
embeddedt
4c80deae25
Backport Diagonal Fences fix to 1.19.2
Related: #171
2023-07-21 10:47:50 -04:00
embeddedt
c6eb703648
Merge 1.19.4 into 1.20 2023-07-20 21:35:15 -04:00
embeddedt
24598ac463
Merge 1.19.2 into 1.19.4 2023-07-20 21:35:14 -04:00
embeddedt
b98377d5cb
Merge 1.16 into 1.18 2023-07-20 21:35:13 -04:00
embeddedt
08bf8ecc89
Merge 1.18 into 1.19.2 2023-07-20 21:35:13 -04:00
embeddedt
7dbb926787
Forceload RenderType/RenderStateShard on the main thread during startup
Fixes launch deadlock with Registrate/Quark
2023-07-20 21:34:04 -04:00
embeddedt
a5fb8575a6
Merge 1.19.4 into 1.20 2023-07-20 20:18:46 -04:00
embeddedt
f9315a127f
Merge 1.19.2 into 1.19.4 2023-07-20 20:18:45 -04:00
embeddedt
22d0d55d79
Merge 1.18 into 1.19.2 2023-07-20 20:18:44 -04:00
embeddedt
50ab84af42
Merge 1.16 into 1.18 2023-07-20 20:18:43 -04:00
embeddedt
4397f274a5
Prevent CME from thread dumper 2023-07-20 20:18:34 -04:00
embeddedt
374aac7ff5
Merge 1.19.4 into 1.20 2023-07-20 10:57:47 -04:00
embeddedt
e8aa88b317
Fix Diagonal Fences breaking after resource reload 2023-07-20 10:57:29 -04:00
embeddedt
5ed2faebc4
Merge 1.19.4 into 1.20 2023-07-20 10:43:40 -04:00
embeddedt
0767b6e9cf
Fix incorrect field being used for pre-bake event 2023-07-20 10:43:23 -04:00
embeddedt
174e609526
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-07-19 22:15:51 -04:00
embeddedt
63111ed938
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-07-19 22:15:40 -04:00
embeddedt
42298947cc
Backport model loading API change to 1.19.4 2023-07-19 22:15:16 -04:00
embeddedt
427a92f0f3
Stop JiJing fabric-models-v0 2023-07-19 22:10:38 -04:00
embeddedt
4a0219e9da
Revert JiJ of fabric-model-loading-api-v1 2023-07-19 22:07:50 -04:00
embeddedt
b7a1f16a9d
Merge 1.19.4 into 1.20 2023-07-19 17:34:39 -04:00
embeddedt
5994edcf17
Merge 1.19.2 into 1.19.4 2023-07-19 17:34:38 -04:00
embeddedt
754e7741c7
Merge 1.18 into 1.19.2 2023-07-19 17:32:36 -04:00
embeddedt
4f428b0e5d
Merge 1.16 into 1.18 2023-07-19 17:32:18 -04:00
embeddedt
ad60b1dec6
Fix timing of dynamic baked model registry handoff 2023-07-19 17:31:24 -04:00
embeddedt
d1a1fce7e1
Improve reliability of ItemOverrideBakedModel if not replaced 2023-07-19 17:08:23 -04:00
embeddedt
d69f5ac18d
Merge 1.19.4 into 1.20 2023-07-19 17:01:44 -04:00
embeddedt
72a45ef014
Synchronize outside of ModelBaker for FAPI compat 2023-07-19 17:01:10 -04:00
embeddedt
3162a531b7
Merge 1.19.4 into 1.20 2023-07-19 16:46:15 -04:00
embeddedt
02f6431109
Merge 1.19.2 into 1.19.4 2023-07-19 16:46:14 -04:00
embeddedt
af5ece3fe9
Merge 1.18 into 1.19.2 2023-07-19 16:46:13 -04:00
embeddedt
91980319d2
Merge 1.16 into 1.18 2023-07-19 16:46:13 -04:00
embeddedt
8383053b5c
Fix wall block deduplication crashing when invasive mods replace vanilla walls
Related: #168
2023-07-19 16:45:32 -04:00
embeddedt
7d7e2f029d
Merge 1.19.4 into 1.20 2023-07-19 12:39:52 -04:00
embeddedt
3827d8a5ce
Merge 1.19.2 into 1.19.4 2023-07-19 12:39:09 -04:00
embeddedt
2941f11c54
Revert resource loader JiJ on 1.19+ 2023-07-19 12:38:59 -04:00
embeddedt
9eed139cc9
Merge 1.19.4 into 1.20 2023-07-19 12:32:40 -04:00
embeddedt
ab55dde534
Merge 1.19.2 into 1.19.4 2023-07-19 12:32:39 -04:00
embeddedt
0bc372bf86
Merge 1.18 into 1.19.2 2023-07-19 12:32:38 -04:00
embeddedt
4c737e315e
Merge 1.16 into 1.18 2023-07-19 12:32:37 -04:00
embeddedt
d8e515272a
Even more resilient Night Config fix 2023-07-19 12:32:26 -04:00
embeddedt
30f483245c
Merge 1.19.4 into 1.20 2023-07-19 12:20:52 -04:00
embeddedt
8527594b3b
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-19 12:17:13 -04:00
embeddedt
12ec9b08bf
Update ItemOverrideBakedModel for 1.19 2023-07-19 12:15:29 -04:00
embeddedt
3fed2ef08d
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-19 12:09:39 -04:00
embeddedt
d9b9586af3
Update item override patch to 1.18 2023-07-19 12:08:15 -04:00
embeddedt
6fda7393b3
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-19 11:51:00 -04:00
embeddedt
ac436db456
Add support to dynamic resources for item overrides 2023-07-19 11:50:16 -04:00
embeddedt
e65f8fbb32
Add option to override overrides
Absolutely no support is guaranteed when this is used
2023-07-19 10:05:09 -04:00
embeddedt
5b716dcdf2
Merge 1.19.4 into 1.20 2023-07-18 13:57:31 -04:00
embeddedt
e88d8bb7b7
Merge 1.19.2 into 1.19.4 2023-07-18 13:57:30 -04:00
embeddedt
94433b0107
Merge 1.18 into 1.19.2 2023-07-18 13:57:29 -04:00
embeddedt
8ac43d5617
Fix incorrect import 2023-07-18 13:51:21 -04:00
embeddedt
90e63341bd
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-18 13:48:50 -04:00
embeddedt
36eb73b28e
Generify config patch to also work with Night Config Fixes mod 2023-07-18 13:48:20 -04:00
embeddedt
b499a054b9
Possible fix for the elusive Forge config corruption bug
Block file watcher from proceeding until config is done saving

Related: https://github.com/MinecraftForge/MinecraftForge/issues/9122
2023-07-18 12:44:11 -04:00
embeddedt
ed7bd69116
Merge branch 'dev/fabric-model-v1' into 1.20 2023-07-18 11:28:24 -04:00
embeddedt
e34beb5775
Merge 1.19.4 into 1.20 2023-07-17 16:09:27 -04:00
embeddedt
95c3044a40
Merge 1.19.2 into 1.19.4 2023-07-17 16:09:26 -04:00
embeddedt
ab7c982589
Merge 1.18 into 1.19.2 2023-07-17 16:08:28 -04:00
embeddedt
92643a244e
Merge 1.16 into 1.18 2023-07-17 16:08:27 -04:00
embeddedt
c3e3dff805
Return all possible states for model if given location is not an MRL 2023-07-17 16:07:51 -04:00
embeddedt
5ec070843d
Use CachedResourcePath in resource finder
Reduces memory usage by ~50%
2023-07-17 13:42:50 -04:00
embeddedt
9fbb97d0fa
Use Guava multimap for resource finder instead of custom "multi"map 2023-07-17 13:20:46 -04:00
embeddedt
c51b0585a2
Merge 1.19.4 into 1.20 2023-07-16 20:00:08 -04:00
embeddedt
2f7bd0e083
Merge 1.19.2 into 1.19.4 2023-07-16 20:00:07 -04:00
embeddedt
594c47f08b
Merge 1.18 into 1.19.2 2023-07-16 20:00:06 -04:00
embeddedt
94d5121a26
Merge 1.16 into 1.18 2023-07-16 20:00:06 -04:00
embeddedt
4f186c03f5
Filter valid paths using explicit joiner instead of Path.toString
to avoid issues on Windows
2023-07-16 19:59:22 -04:00
embeddedt
e86787c663
Merge 1.19.4 into 1.20 2023-07-16 16:58:47 -04:00
embeddedt
24ec6f154a
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-16 16:58:41 -04:00
embeddedt
c4abe1cf05
Merge 1.18 into 1.19.2 2023-07-15 21:32:20 -04:00
embeddedt
6f710f1f6b
Merge 1.16 into 1.18 2023-07-15 21:32:20 -04:00
embeddedt
33d27ff04b
Fix memory leak on Fabric from models being saved to the vanilla map 2023-07-15 21:32:02 -04:00
embeddedt
9a5edb9431
Merge 1.19.4 into 1.20 2023-07-15 20:37:19 -04:00
embeddedt
2a328356cd
Merge 1.19.2 into 1.19.4 2023-07-15 20:37:18 -04:00
embeddedt
48fdb94343
Merge 1.18 into 1.19.2 2023-07-15 20:37:18 -04:00
embeddedt
67343b5680
Merge 1.16 into 1.18 2023-07-15 20:37:17 -04:00
embeddedt
ad948f0ec1
Rework wall block caching to cache collision shapes as well 2023-07-15 20:36:56 -04:00
embeddedt
c63a8fa21e
Deduplicate wall block shapes 2023-07-15 20:23:59 -04:00
embeddedt
2c53c01cbc
Improve patchlist formatting 2023-07-15 17:10:09 -04:00
embeddedt
a8fd35fd15
JiJ required version of fabric-resource-loader-v0 module
Related: #163
2023-07-15 16:26:58 -04:00
embeddedt
d9f93ec67e
Merge 1.19.4 into 1.20 2023-07-15 15:07:38 -04:00
embeddedt
18e354d0ae
Merge 1.19.2 into 1.19.4 2023-07-15 15:07:37 -04:00
embeddedt
09d24c542e
Merge 1.18 into 1.19.2 2023-07-15 15:07:17 -04:00
embeddedt
9fcc1f5dc2
Merge 1.16 into 1.18 2023-07-15 15:05:56 -04:00
embeddedt
dff181accb
Allow corrupt JSONs when scanning models for textures
Fixes Hexerei textures being missing on 1.18
2023-07-15 15:05:25 -04:00
embeddedt
ff292cfabc
Merge 1.19.4 into 1.20 2023-07-14 13:57:40 -04:00
embeddedt
76d6ff14c2
Merge 1.19.2 into 1.19.4 2023-07-14 13:57:13 -04:00
embeddedt
89522a8197
Merge 1.18 into 1.19.2 2023-07-14 13:54:50 -04:00
embeddedt
a2eacc0fd3
Merge 1.16 into 1.18 2023-07-14 13:54:49 -04:00
embeddedt
565cc23c6c
Only apply Parchment mappings if version is provided 2023-07-14 13:54:23 -04:00
embeddedt
faccdb0ed7
Merge 1.19.4 into 1.20 2023-07-13 21:43:49 -04:00
embeddedt
b0815bcae6
Merge 1.19.2 into 1.19.4 2023-07-13 21:43:48 -04:00
embeddedt
c684b56124
Merge 1.18 into 1.19.2 2023-07-13 21:43:48 -04:00
embeddedt
dccde1a422
Merge 1.16 into 1.18 2023-07-13 21:43:47 -04:00
embeddedt
6cd99383b9
Disable item_cache_flag when Lithium or derivatives are present,
as they rely on the broken cache logic
2023-07-13 21:43:40 -04:00
embeddedt
0116a31616
Hotfix for Class.descriptorString() not existing on Java 8 2023-07-13 21:20:16 -04:00
embeddedt
dc0ea4d828
Merge 1.19.4 into 1.20 2023-07-13 20:12:46 -04:00
embeddedt
ec1bacd1dd
Merge 1.19.2 into 1.19.4 2023-07-13 20:12:46 -04:00
embeddedt
0ebb566645
Merge 1.18 into 1.19.2 2023-07-13 20:12:45 -04:00
embeddedt
7c3b01c911
Merge 1.16 into 1.18 2023-07-13 20:12:44 -04:00
embeddedt
ec02a77c19
Add tag cleaner script to help with changelog issues 2023-07-13 20:12:03 -04:00
embeddedt
1531762524
Merge 1.19.4 into 1.20 2023-07-13 19:40:40 -04:00
embeddedt
b79a66ce83
Merge 1.19.2 into 1.19.4 2023-07-13 19:40:39 -04:00
embeddedt
17d479bc93
Merge 1.18 into 1.19.2 2023-07-13 19:40:38 -04:00
embeddedt
5f59fdf471
Merge 1.16 into 1.18 2023-07-13 19:40:37 -04:00
其智乃反不能及
a1ee34bb1c
Update zh_cn.json (#153) 2023-07-13 19:39:48 -04:00
embeddedt
a799afc19c
Merge 1.19.4 into 1.20 2023-07-13 17:08:59 -04:00
embeddedt
24130cde74
Merge 1.19.2 into 1.19.4 2023-07-13 17:08:58 -04:00
embeddedt
bd179f817f
Merge 1.18 into 1.19.2 2023-07-13 17:08:57 -04:00
embeddedt
fd72aa4fac
Merge 1.16 into 1.18 2023-07-13 17:08:57 -04:00
embeddedt
793fb5f388
Allow spam_thread_dump to work even earlier 2023-07-13 17:08:32 -04:00
embeddedt
eecf9f0726
Merge 1.19.4 into 1.20 2023-07-13 14:58:37 -04:00
embeddedt
9f212fc475
Merge 1.19.2 into 1.19.4 2023-07-13 14:58:36 -04:00
embeddedt
40ec3f14bf
Do not run Decorative Blocks fix without Decorative Blocks installed
🤦‍♂️
2023-07-13 14:58:19 -04:00
embeddedt
ad1df59c18
Update 2023-07-13 11:52:23 -04:00
embeddedt
804cd04778
Explicitly depend on fabric-model-loading-api-v1 so it gets JiJed 2023-07-12 20:37:53 -04:00
embeddedt
083664d858
Support the new Fabric Model Loading API v1 2023-07-12 20:13:50 -04:00
embeddedt
c98721056d
Merge 1.19.4 into 1.20 2023-07-12 19:37:05 -04:00
embeddedt
d2fe664fe5
Merge 1.19.2 into 1.19.4 2023-07-12 19:37:04 -04:00
embeddedt
ad35fc535e
Merge 1.18 into 1.19.2 2023-07-12 19:37:03 -04:00
embeddedt
10bd3e1899
Merge 1.16 into 1.18 2023-07-12 19:37:02 -04:00
embeddedt
d14ae9d2c1
Fix formatting issue 2023-07-12 19:36:52 -04:00
embeddedt
e4cce437d4
Merge 1.19.4 into 1.20 2023-07-12 19:35:53 -04:00
embeddedt
3a6b5c91d5
Merge 1.19.2 into 1.19.4 2023-07-12 19:35:52 -04:00
embeddedt
1b563c30c5
Merge 1.18 into 1.19.2 2023-07-12 19:35:51 -04:00
embeddedt
9cedaf18a8
Merge 1.16 into 1.18 2023-07-12 19:35:50 -04:00
embeddedt
5fd02ffc96
Very bad hack for wiki race condition
GitHub's "concurrency" system just cancels pending jobs instead
of scheduling them
2023-07-12 19:35:23 -04:00
embeddedt
e5152439ef
Merge 1.19.4 into 1.20 2023-07-12 19:30:47 -04:00
embeddedt
1a68035131
Merge 1.19.2 into 1.19.4 2023-07-12 19:30:47 -04:00
embeddedt
5294503483
Merge 1.18 into 1.19.2 2023-07-12 19:30:46 -04:00
embeddedt
f2d05c1355
Merge 1.16 into 1.18 2023-07-12 19:30:45 -04:00
embeddedt
8f806e6285
Use shared branch list script 2023-07-12 19:30:37 -04:00
embeddedt
73e8631fcd
Merge 1.19.4 into 1.20 2023-07-12 11:49:31 -04:00
embeddedt
29c260f7ce
Merge 1.19.2 into 1.19.4 2023-07-12 11:49:30 -04:00
embeddedt
5318347ab2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-12 11:49:19 -04:00
embeddedt
40ddd2dfdb
Merge 1.16 into 1.18 2023-07-12 11:48:01 -04:00
Kichura
d36cc4acc1
Fix python3 not having friendly name. (#160) 2023-07-12 11:37:46 -04:00
embeddedt
6548d5da80
Fix parity issue in paper_chunk_patches for 1.20+
Ensure scheduleChunkGeneration is correctly called if chunk status has load dependencies

Thanks to ishland for noticing this
2023-07-12 11:28:19 -04:00
Kichura
09aae6e34c
Enhance the workflow scripts and update Gradle. (#159)
* Update workflow actions and Gradle.
* Introduce friendly names to wiki_update and release scripts.
* Only embeddedt can run release and update wiki workflows.
2023-07-12 11:19:19 -04:00
embeddedt
aff4e0c2d0
Drop chunk status transition patch from paper_chunk_patches
Research by ishland suggests that vanilla already does this, at least
since 1.18
2023-07-12 10:53:12 -04:00
embeddedt
08daaa38e9
Do not cancel running wiki jobs [skip ci] 2023-07-11 22:16:07 -04:00
embeddedt
55c9b8e322
Merge 1.19.4 into 1.20 2023-07-11 22:15:11 -04:00
embeddedt
9281344863
Merge 1.19.2 into 1.19.4 2023-07-11 22:15:10 -04:00
embeddedt
061806eb8f
Merge 1.18 into 1.19.2 2023-07-11 22:15:09 -04:00
embeddedt
8067cb6e65
Merge 1.16 into 1.18 2023-07-11 22:15:08 -04:00
embeddedt
b31381ed4d
Prevent race condition when updating wikis 2023-07-11 22:14:54 -04:00
embeddedt
2bf51c2034
Merge 1.19.4 into 1.20 2023-07-11 22:13:41 -04:00
embeddedt
cbf63b8c19
Merge 1.19.2 into 1.19.4 2023-07-11 22:13:40 -04:00
embeddedt
f715a0c8a3
Merge 1.18 into 1.19.2 2023-07-11 22:13:39 -04:00
embeddedt
f7259f745f
Merge 1.16 into 1.18 2023-07-11 22:13:38 -04:00
embeddedt
423a550303
Add wiki update action 2023-07-11 22:12:15 -04:00
embeddedt
944e481f32
Remove item cache flag patch on 1.20 branch 2023-07-11 21:33:27 -04:00
embeddedt
b409db3e29
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-07-11 21:33:07 -04:00
embeddedt
6ae19f11ea
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-11 21:31:29 -04:00
embeddedt
eded461866
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-11 21:23:38 -04:00
embeddedt
c1e40ebe1f
Update item empty cache patch for 1.18 2023-07-11 21:23:22 -04:00
embeddedt
406a4a3a91
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-11 21:17:59 -04:00
embeddedt
896c8d1f5f
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-11 21:14:47 -04:00
embeddedt
816346e919
Make mod overrides higher priority than user configuration
Prevents players inadvertently enabling incompatible options
2023-07-11 21:13:02 -04:00
embeddedt
4c484f5125
Recognize ThreadTweak when disabling overlapping patches 2023-07-11 19:03:20 -04:00
embeddedt
c7aaa15a19
Remove emptyCacheFlag from item stacks (fixes MC-258939) 2023-07-11 17:25:26 -04:00
embeddedt
a5ae6e0631
Merge 1.19.4 into 1.20 2023-07-11 17:00:20 -04:00
embeddedt
0e248f8b83
Merge 1.19.2 into 1.19.4 2023-07-11 17:00:20 -04:00
embeddedt
2ca29efd77
Merge 1.18 into 1.19.2 2023-07-11 17:00:19 -04:00
embeddedt
3c9e5d2f0f
Disable deduplicate_climate_parameters by default
The 1.5-2MB this saves in vanilla isn't worth the cost of deduplication
in larger modpacks. Option still works fine and can be re-enabled
2023-07-11 16:58:19 -04:00
embeddedt
61288a17ac
Merge 1.19.4 into 1.20 2023-07-11 14:25:35 -04:00
embeddedt
fff28fdcbf
Merge 1.19.2 into 1.19.4 2023-07-11 14:25:34 -04:00
embeddedt
84cc58d30b
Merge 1.18 into 1.19.2 2023-07-11 14:25:33 -04:00
embeddedt
1f043c7088
Attempt fix for occasional world holes when paper_chunk_patches is enabled
1.18 seems to never return an unloaded Either here, instead always calling
scheduleChunkGeneration, so we do the same. This hasn't regressed
memory usage from some testing on 1.20.
2023-07-11 14:22:12 -04:00
embeddedt
9a966cfad9
Merge 1.19.4 into 1.20 2023-07-10 20:28:31 -04:00
embeddedt
e235e07bb2
Merge 1.19.2 into 1.19.4 2023-07-10 20:28:30 -04:00
embeddedt
1ba2a1fae0
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-10 20:28:20 -04:00
embeddedt
e87c85b75c
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-10 20:24:38 -04:00
embeddedt
bd351197b2
Backport https://github.com/MinecraftForge/MinecraftForge/pull/8959 to 1.18 2023-07-10 20:23:54 -04:00
embeddedt
4537f86bbc
Add mod menu in dev 2023-07-10 19:40:22 -04:00
embeddedt
546d1df48f
Prevent mixin.perf suboptions from defaulting to on if an explicit
option is not added
2023-07-10 19:13:01 -04:00
embeddedt
4ea7b864a8
Add facility to hide mixin options outside dev 2023-07-10 19:00:37 -04:00
embeddedt
489d3abe65
Merge 1.19.4 into 1.20 2023-07-10 09:02:45 -04:00
embeddedt
5dea99f139
Merge 1.19.2 into 1.19.4 2023-07-10 09:02:44 -04:00
embeddedt
11f107d60b
Merge 1.18 into 1.19.2 2023-07-10 09:02:43 -04:00
embeddedt
829994f5b5
Merge 1.16 into 1.18 2023-07-10 09:02:42 -04:00
embeddedt
5315d80859
Use synchronized HashMap instead of CHM to permit null keys for buggy mods
Related: #157
2023-07-10 09:01:18 -04:00
embeddedt
61a8000bf1
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-09 21:17:50 -04:00
embeddedt
a189927b22
Fix Decorative Blocks keybind being unconfigurable 2023-07-09 21:17:37 -04:00
embeddedt
b3f00a0681
Merge 1.19.4 into 1.20 2023-07-09 20:41:08 -04:00
embeddedt
8cc5785e86
Port dynres change to 1.19.4+ 2023-07-09 20:38:35 -04:00
embeddedt
827d09289d
Merge 1.19.4 into 1.20 2023-07-09 20:37:25 -04:00
embeddedt
0ce00531a6
Merge 1.19.2 into 1.19.4 2023-07-09 20:37:24 -04:00
embeddedt
4962d855af
Merge 1.18 into 1.19.2 2023-07-09 20:37:23 -04:00
embeddedt
ef47883262
Merge 1.16 into 1.18 2023-07-09 20:37:22 -04:00
embeddedt
dfdbf8544a
Guard against early parent resolution failing 2023-07-09 20:36:57 -04:00
embeddedt
7e25e31d33
Merge 1.19.4 into 1.20 2023-07-09 20:35:41 -04:00
embeddedt
a1d56e2921
Merge 1.19.2 into 1.19.4 2023-07-09 20:35:41 -04:00
embeddedt
a34ac84e00
Merge 1.18 into 1.19.2 2023-07-09 20:35:40 -04:00
embeddedt
e248e2966a
Merge 1.16 into 1.18 2023-07-09 20:35:39 -04:00
embeddedt
49b31c347b
Resolve parents in getModel rather than at bake time
Fixes EBE chests
2023-07-09 20:35:31 -04:00
embeddedt
f040f66bf9
Make backing maps in ItemProperties thread-safe
Helps prevent CMEs on Forge 1.16
2023-07-09 19:02:59 -04:00
embeddedt
6bc2b5b36e
Fix version autodetection when autoreleasing [skip ci] 2023-07-09 14:21:18 -04:00
embeddedt
540b19c141
Merge 1.19.4 into 1.20 2023-07-09 14:15:14 -04:00
embeddedt
aa493c41d5
Merge 1.19.2 into 1.19.4 2023-07-09 14:15:13 -04:00
embeddedt
637f844601
Merge 1.18 into 1.19.2 2023-07-09 14:15:12 -04:00
embeddedt
1815554070
Merge 1.16 into 1.18 2023-07-09 14:15:11 -04:00
embeddedt
5f255a83dc
Implement Map.replace on DynamicBakedModelProvider
Related: #154
2023-07-09 14:14:34 -04:00
embeddedt
05e66b2492
Merge 1.19.4 into 1.20 2023-07-09 13:32:49 -04:00
embeddedt
ae115c4908
Merge 1.19.2 into 1.19.4 2023-07-09 13:32:49 -04:00
embeddedt
28c456e4c5
Merge 1.18 into 1.19.2 2023-07-09 13:32:34 -04:00
embeddedt
2d12c6e282
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-09 13:31:01 -04:00
embeddedt
d987c1227b
Scan fallback resource managers as well as main resource manager
For buggy mods such as https://github.com/FoundationGames/EnhancedBlockEntities/issues/162
2023-07-09 13:27:18 -04:00
embeddedt
7d8dd5ab09
Merge 1.19.4 into 1.20 2023-07-08 14:52:16 -04:00
embeddedt
adfbc7508e
Merge 1.19.2 into 1.19.4 2023-07-08 14:52:16 -04:00
embeddedt
417eaa544f
Merge 1.18 into 1.19.2 2023-07-08 14:52:15 -04:00
embeddedt
a502a509ed
Merge 1.16 into 1.18 2023-07-08 14:51:43 -04:00
embeddedt
bb0c4fdf54
Ignore RuntimeException when gathering blockstate paths 2023-07-08 14:51:07 -04:00
embeddedt
1a7909aaa4
Merge 1.19.4 into 1.20 2023-07-07 21:06:48 -04:00
embeddedt
0fea79a647
Merge 1.19.2 into 1.19.4 2023-07-07 21:06:47 -04:00
embeddedt
ed2d01df4d
Merge 1.18 into 1.19.2 2023-07-07 21:06:46 -04:00
embeddedt
2e31a4e2c1
Merge 1.16 into 1.18 2023-07-07 21:06:45 -04:00
embeddedt
352f8bb6d1
Upload changelog to GitHub on release 2023-07-07 21:06:11 -04:00
embeddedt
e56898fff4
Merge 1.19.4 into 1.20 2023-07-07 20:23:42 -04:00
embeddedt
7671066548
Merge 1.19.2 into 1.19.4 2023-07-07 20:23:41 -04:00
embeddedt
87cd49a291
Merge 1.18 into 1.19.2 2023-07-07 20:23:40 -04:00
embeddedt
8fd31f3190
Merge 1.16 into 1.18 2023-07-07 20:23:39 -04:00
embeddedt
f3a2ca73e8
Log all option overrides once at startup rather than per mixin 2023-07-07 20:23:10 -04:00
embeddedt
f27d6e154c
Make disabling feature.measure_time also disable game/world load messages 2023-07-07 20:19:08 -04:00
embeddedt
60d06c92f6
Merge 1.19.4 into 1.20 2023-07-07 19:22:08 -04:00
embeddedt
f1cd8bac20
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-07 19:21:25 -04:00
embeddedt
6020ff7ee1
Merge 1.18 into 1.19.2 2023-07-07 19:19:44 -04:00
embeddedt
b99e253715
Merge 1.16 into 1.18 2023-07-07 19:19:43 -04:00
embeddedt
1c0fca8f06 Spotless 2023-07-07 12:40:46 -04:00
embeddedt
003cad94a0 Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-07 12:39:47 -04:00
embeddedt
98663fa416 Never replace search tree on 1.16 with REI present 2023-07-07 12:39:26 -04:00
embeddedt
cb55bd3612 Merge 1.18 into 1.19.2 2023-07-07 12:35:55 -04:00
embeddedt
2ec8a2719e Merge 1.16 into 1.18 2023-07-07 12:35:53 -04:00
embeddedt
79219d286f Fix issue with anonymous classes in mixin
Related: #151
2023-07-07 12:34:36 -04:00
embeddedt
e65727937c
Merge 1.19.4 into 1.20 2023-07-06 22:10:26 -04:00
embeddedt
a1f3cb9270
Merge 1.19.2 into 1.19.4 2023-07-06 22:10:25 -04:00
embeddedt
3b85b20020
Merge 1.18 into 1.19.2 2023-07-06 22:10:24 -04:00
embeddedt
36a1b6bb93
Merge 1.16 into 1.18 2023-07-06 22:10:24 -04:00
embeddedt
29f7badbfb
Update test to reflect Mojang changes [skip ci] 2023-07-06 22:10:16 -04:00
embeddedt
8f896f065c
Limit registry wrapping to known bad mods to avoid performance issues 2023-07-06 22:05:27 -04:00
ZZZank
45ada33d7d
Update zh_cn Translation (#150)
from: ce6ce1d341
2023-07-06 21:34:25 -04:00
embeddedt
5e7421ab24
Merge 1.19.4 into 1.20 2023-07-06 21:29:26 -04:00
embeddedt
8325a8ba02
Merge 1.19.2 into 1.19.4 2023-07-06 21:29:09 -04:00
embeddedt
9b93a28ddb
Merge 1.18 into 1.19.2 2023-07-06 21:28:56 -04:00
embeddedt
ad798850c6
Merge 1.16 into 1.18 2023-07-06 21:28:55 -04:00
embeddedt
8bc0946977
Fix remapping issue on newer MC versions 2023-07-06 21:28:41 -04:00
embeddedt
92264ed37e
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-06 21:27:43 -04:00
embeddedt
9ce029b35d
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-06 21:24:11 -04:00
embeddedt
127f091728
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-06 21:14:44 -04:00
embeddedt
16d317af97
Only provide each mod its own model list in ModelBakeEvent 2023-07-06 21:12:59 -04:00
embeddedt
1b6880ed9f
Make modelRegistry.keySet() more accurate on Forge when dynamic resources is on 2023-07-06 20:43:35 -04:00
embeddedt
db4f6738ee
Credit AE2 for JUnit bootstrap extension design 2023-07-06 19:35:36 -04:00
embeddedt
ff39e9022b
Get testing working, add tests for blockstate cache rebuilds 2023-07-06 19:26:44 -04:00
embeddedt
03b2395782
Add custom agent to work around https://github.com/FabricMC/fabric-loader/issues/817 2023-07-06 18:42:50 -04:00
embeddedt
e023829310
Upgrade Fabric Loader to 0.14.21 2023-07-06 15:11:09 -04:00
embeddedt
582f17c0e7
Update Loom to prepare for unit tests 2023-07-06 14:42:51 -04:00
embeddedt
454256d455
Deduplicate climate parameters 2023-07-06 12:29:29 -04:00
embeddedt
6300dd6737
Add utility for disabling Unihex font
Saves 10MB of RAM
2023-07-06 11:38:36 -04:00
embeddedt
5ca9485f0b
Add null check for ClassInfo objects 2023-07-05 21:52:02 -04:00
embeddedt
ce8c6e0283
Merge 1.19.4 into 1.20 2023-07-05 20:02:28 -04:00
embeddedt
50e558644a
Merge 1.19.2 into 1.19.4 2023-07-05 20:02:27 -04:00
embeddedt
1592e1c0ce
Merge 1.18 into 1.19.2 2023-07-05 20:02:26 -04:00
embeddedt
d155dacadc
Merge 1.16 into 1.18 2023-07-05 20:02:14 -04:00
embeddedt
c6cb0acd3c
Rewrite clear_mixin_classinfo, now more aggressive 2023-07-05 20:01:43 -04:00
embeddedt
ba7bda0b04
Remove LazyDFU change for 1.20 2023-07-05 15:08:31 -04:00
embeddedt
c7787d1390
Merge 1.19.2 into 1.19.4 2023-07-05 15:04:49 -04:00
embeddedt
a7d0d4892f
Merge 1.19.4 into 1.20 2023-07-05 15:04:49 -04:00
embeddedt
463f1c540e
Make sure LazyDFU warning is not shown if FML disables DFU already 2023-07-05 15:04:29 -04:00
embeddedt
079c348948
Merge 1.19.4 into 1.20 2023-07-05 14:52:56 -04:00
embeddedt
c50388a358
Merge 1.19.2 into 1.19.4 2023-07-05 14:52:55 -04:00
embeddedt
b637d79c50
Merge 1.18 into 1.19.2 2023-07-05 14:52:54 -04:00
embeddedt
5a6ab4f781
Fix missed import during merge 2023-07-05 14:51:16 -04:00
embeddedt
2a16229056
Merge 1.19.4 into 1.20 2023-07-05 14:50:28 -04:00
embeddedt
7652a1dbc5
Merge 1.19.2 into 1.19.4 2023-07-05 14:50:07 -04:00
embeddedt
6d4071f42c
Merge 1.18 into 1.19.2 2023-07-05 14:50:05 -04:00
embeddedt
6cd49334d7
Merge 1.16 into 1.18 2023-07-05 14:47:30 -04:00
embeddedt
095b9c3277
Revamp mod warning system, also warn about FerriteCore missing 2023-07-05 14:47:17 -04:00
embeddedt
5aeea48413
Apply spotless 2023-07-05 12:47:43 -04:00
embeddedt
7632647e1d
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-07-05 12:45:02 -04:00
embeddedt
41a56fba20
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-07-05 12:35:41 -04:00
embeddedt
1600dc4f84
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-07-05 12:26:14 -04:00
embeddedt
46cff62796
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-07-05 12:18:00 -04:00
embeddedt
0a2601257c
Fix dynamic resources losing nested model loads sometimes 2023-07-05 12:04:10 -04:00
embeddedt
c73cb8115e
Fix mixin crash outside dev 2023-07-05 11:24:04 -04:00
embeddedt
ce6ce1d341
Add option categories 2023-07-04 11:14:23 -04:00
embeddedt
18f78b9624
Add in-game patch descriptions 2023-07-03 17:04:20 -04:00
embeddedt
c33fe2e928
Merge 1.19.4 into 1.20 2023-07-03 15:10:48 -04:00
embeddedt
cac4ca96d5
Merge 1.19.2 into 1.19.4 2023-07-03 15:10:47 -04:00
embeddedt
cc89986a94
Merge 1.18 into 1.19.2 2023-07-03 15:10:38 -04:00
embeddedt
5a0c286ff4
Merge 1.16 into 1.18 2023-07-03 15:10:38 -04:00
embeddedt
dd4a72a6f9
Tweak dynamic resources model baking override point on Fabric
Related: #120
2023-07-03 15:10:05 -04:00
embeddedt
3237de7e33
Merge 1.19.4 into 1.20 2023-07-03 14:59:21 -04:00
embeddedt
37d6f477c4
Merge 1.19.2 into 1.19.4 2023-07-03 14:58:45 -04:00
embeddedt
0f90f53f53
Merge 1.18 into 1.19.2 2023-07-03 14:58:44 -04:00
embeddedt
9d5953c9f5
Merge 1.16 into 1.18 2023-07-03 14:58:06 -04:00
embeddedt
3541019ee0
Modify entity loading semantics on Forge to allow EntityJoinWorldEvent handlers to load chunks 2023-07-03 12:26:57 -04:00
embeddedt
ace3975156
Make datapack reload exception silencers not required 2023-07-02 22:14:32 -04:00
notlin4
6f07cbdc70
Add Traditional Chinese translation (#148) 2023-07-02 13:34:23 -04:00
embeddedt
dc8d727bdb
Update Diagonal Fences mixin 2023-07-02 13:30:43 -04:00
embeddedt
90adb1c627
Reduce Twilight Forest structure lag
Related: #147
2023-07-01 19:01:10 -04:00
embeddedt
3be36f826c
Merge 1.19.4 into 1.20 2023-06-29 19:28:08 -04:00
embeddedt
dc268285b0
Add .mcmeta files to resource list to match 1.19.4+ behavior
Fixes modded texture .mcmeta files not being picked up

Fixes #145
2023-06-29 19:28:01 -04:00
embeddedt
7464cf7420
Merge 1.19.4 into 1.20 2023-06-29 15:26:55 -04:00
embeddedt
30c9956acd
Merge 1.19.2 into 1.19.4 2023-06-29 15:26:55 -04:00
embeddedt
7cc579fd61
Merge 1.18 into 1.19.2 2023-06-29 15:26:54 -04:00
embeddedt
709ba2d4f7
Merge 1.16 into 1.18 2023-06-29 15:26:33 -04:00
embeddedt
25df7fd8c7
Bump patch version for beta builds 2023-06-29 15:26:20 -04:00
embeddedt
73a0c4f400
Set version specifiers automatically in release script [skip ci] 2023-06-29 13:10:27 -04:00
embeddedt
a6cce0c043
Merge 1.19.4 into 1.20 2023-06-27 16:40:33 -04:00
embeddedt
152e795c32
Merge 1.19.2 into 1.19.4 2023-06-27 16:40:32 -04:00
embeddedt
89a78bf43b
Merge 1.18 into 1.19.2 2023-06-27 16:40:31 -04:00
embeddedt
1e9e310922
Merge 1.16 into 1.18 2023-06-27 16:40:30 -04:00
embeddedt
8bb5e464bc
Disable cache_strongholds when LittleTiles is installed
Related: #143
Related: https://github.com/CreativeMD/LittleTiles/issues/859
2023-06-27 16:39:49 -04:00
embeddedt
840cad23b8
Merge 1.19.4 into 1.20 2023-06-27 15:29:27 -04:00
embeddedt
93817c5d3a
Merge 1.19.2 into 1.19.4 2023-06-27 15:29:26 -04:00
embeddedt
470f8aed5b
Merge 1.18 into 1.19.2 2023-06-27 15:29:25 -04:00
embeddedt
e9ee866c60
Merge 1.16 into 1.18 2023-06-27 15:29:25 -04:00
embeddedt
4f711a4995
Populate isFabric earlier 2023-06-27 15:29:14 -04:00
embeddedt
463bd4ef51
Merge 1.19.4 into 1.20 2023-06-27 11:27:38 -04:00
embeddedt
c8192ef7e3
Merge 1.19.2 into 1.19.4 2023-06-27 11:27:37 -04:00
embeddedt
6ed3c5d365
Merge 1.18 into 1.19.2 2023-06-27 11:27:36 -04:00
embeddedt
c53ed4650d
Merge 1.16 into 1.18 2023-06-27 11:27:35 -04:00
embeddedt
9b31616585
Clean up build script some more 2023-06-27 11:27:26 -04:00
embeddedt
ca60a13bb4
Merge 1.19.4 into 1.20 2023-06-27 11:04:06 -04:00
embeddedt
96a83533dd
Merge 1.19.2 into 1.19.4 2023-06-27 11:04:05 -04:00
embeddedt
99521e4d76
Merge 1.18 into 1.19.2 2023-06-27 11:04:04 -04:00
embeddedt
299abeb25d
Apply merge mode change to 1.18 2023-06-27 11:03:49 -04:00
embeddedt
454dacea6b
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-06-27 11:02:12 -04:00
embeddedt
922d0f26e1
Use same merge mode as default Spark 2023-06-27 11:01:17 -04:00
embeddedt
54f55ee257
Merge 1.19.4 into 1.20 2023-06-26 21:26:28 -04:00
embeddedt
84b08ef64a
Merge 1.19.2 into 1.19.4 2023-06-26 21:26:27 -04:00
embeddedt
bd3a9eb345
Merge 1.18 into 1.19.2 2023-06-26 21:26:26 -04:00
embeddedt
a937ccb07c
Merge 1.16 into 1.18 2023-06-26 21:26:01 -04:00
embeddedt
58eaf44d89
Make mixin info clearing work on Fabric 2023-06-26 21:15:19 -04:00
embeddedt
7a2d38f2f1
Merge 1.19.4 into 1.20 2023-06-26 19:46:09 -04:00
embeddedt
370a0fad11
Merge 1.19.2 into 1.19.4 2023-06-26 19:46:09 -04:00
embeddedt
ec49868d27
Merge 1.18 into 1.19.2 2023-06-26 19:46:08 -04:00
embeddedt
25d1956da0
Merge 1.16 into 1.18 2023-06-26 19:46:07 -04:00
embeddedt
e3944d7879
Add option to aggressively clear Fabric mapping tables 2023-06-26 19:43:53 -04:00
embeddedt
af486998d2
Merge 1.19.4 into 1.20 2023-06-26 15:57:50 -04:00
embeddedt
5229643761
Add missing ExpectPlatform 2023-06-26 15:57:37 -04:00
embeddedt
4fd4de7d52
Change spark version 2023-06-26 14:33:43 -04:00
embeddedt
8e467e8239
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-06-26 14:33:26 -04:00
embeddedt
04c6ea2e66
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-26 14:33:12 -04:00
embeddedt
b6182b4913
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-06-26 14:30:23 -04:00
embeddedt
ce92fedf09
Give correct MC/platform info to profiler 2023-06-26 14:24:37 -04:00
embeddedt
9eff3e1aa9
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-06-26 14:22:50 -04:00
embeddedt
a01cc836c1
Use correct platform name 2023-06-26 14:22:34 -04:00
embeddedt
012ed17208
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-06-26 14:21:19 -04:00
embeddedt
4943702061
Add platform name to hooks 2023-06-26 14:21:07 -04:00
embeddedt
33c0cf33d9
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-06-26 14:14:35 -04:00
embeddedt
60525ad594
Add option to profile launch using Spark 2023-06-26 13:58:12 -04:00
embeddedt
2bad1c0226
Merge 1.19.4 into 1.20 2023-06-26 13:04:44 -04:00
embeddedt
65506ba7e1
Merge 1.19.2 into 1.19.4 2023-06-26 13:04:43 -04:00
embeddedt
c93380dcf2
Merge 1.18 into 1.19.2 2023-06-26 13:04:41 -04:00
embeddedt
7849ba16f5
Merge 1.16 into 1.18 2023-06-26 13:04:40 -04:00
embeddedt
b611830b7e
Eliminate need to use platform hook to retrieve server here 2023-06-26 13:01:53 -04:00
embeddedt
b755d745c5
Merge 1.19.4 into 1.20 2023-06-26 12:59:35 -04:00
embeddedt
c23a4be440
Merge 1.19.2 into 1.19.4 2023-06-26 12:59:34 -04:00
embeddedt
f89b5d0a34
Merge 1.18 into 1.19.2 2023-06-26 12:59:33 -04:00
embeddedt
2ffb31f00d
Merge 1.16 into 1.18 2023-06-26 12:59:32 -04:00
embeddedt
a6e2fc94b4
Add 1.20 to README 2023-06-26 12:59:20 -04:00
embeddedt
bac13236e7
Use WeakReference for server variable but never clear it for better mod compat 2023-06-26 12:58:03 -04:00
embeddedt
99acb17d90
Bump Forge 2023-06-22 13:53:17 -04:00
embeddedt
565dfb4b81
Merge 1.19.4 into 1.20 2023-06-22 13:45:27 -04:00
embeddedt
24f31dd92a
Initial version of resource pack caching for 1.19.4+ 2023-06-22 13:45:13 -04:00
embeddedt
63bcdb1019
Merge 1.19.4 into 1.20 2023-06-22 13:42:57 -04:00
embeddedt
5b2e70cda0
Merge 1.19.2 into 1.19.4 2023-06-22 13:42:56 -04:00
embeddedt
d97b18e633
Merge 1.18 into 1.19.2 2023-06-22 13:42:55 -04:00
embeddedt
6678864555
Merge 1.16 into 1.18 2023-06-22 13:42:25 -04:00
embeddedt
20ca15f0c4
Add a few more features to resource pack cache engine (for 1.19.4+) 2023-06-22 13:42:15 -04:00
embeddedt
1f589901d6
Merge 1.19.4 into 1.20 2023-06-21 21:44:00 -04:00
embeddedt
1afdfccf3b
Merge 1.19.2 into 1.19.4 2023-06-21 21:43:59 -04:00
embeddedt
5bd745a188
Merge 1.18 into 1.19.2 2023-06-21 21:43:29 -04:00
embeddedt
1ac69035ed
Merge 1.16 into 1.18 2023-06-21 21:41:12 -04:00
embeddedt
19c6687745
More aggressively load model files 2023-06-21 21:17:11 -04:00
embeddedt
2fe5c088e3
Explicitly run it on all branches 2023-06-20 14:58:12 -04:00
embeddedt
fa76a4e2be
Do not run Gradle workflow when pushing a tag 2023-06-20 14:53:20 -04:00
embeddedt
9bc6b7b0f7
Merge 1.19.4 into 1.20 2023-06-20 14:43:13 -04:00
embeddedt
49bc941dd7
Merge 1.19.2 into 1.19.4 2023-06-20 14:43:12 -04:00
embeddedt
4037124c57
Merge 1.18 into 1.19.2 2023-06-20 14:43:11 -04:00
embeddedt
fc908bb92c
Update config fixer for 1.18 2023-06-20 14:40:49 -04:00
embeddedt
c1c0010126
Merge 1.19.4 into 1.20 2023-06-20 14:34:54 -04:00
embeddedt
9cdeeb4c94
Merge 1.19.2 into 1.19.4 2023-06-20 14:34:53 -04:00
embeddedt
a84fa8ac0c
Merge 1.18 into 1.19.2 2023-06-20 14:34:37 -04:00
embeddedt
6a7d62b38d
Merge 1.16 into 1.18 2023-06-20 14:34:36 -04:00
embeddedt
40be7c9fc1
Add a few missing ClientOnlyMixin annotations
Related: #137
2023-06-20 10:43:17 -04:00
embeddedt
5d6566512c
Rewrite CanonizingStringMap to simply use a normal HashMap and intern keys
There are no memory savings from using the fastutil maps, and they
may be harming performance based on the Project MMO issues

Probably also the solution to #134
2023-06-20 10:31:49 -04:00
embeddedt
c1acdf1bb4
Make config wrapping possible to disable 2023-06-20 09:42:44 -04:00
embeddedt
41b71c5e59
Attempt fix for Engineer's Decor and related crashes 2023-06-19 21:49:45 -04:00
embeddedt
1bf64f9aa1
Use annotated tags for releases [skip ci] 2023-06-19 21:07:13 -04:00
embeddedt
f77221d6d8
Fix missing newline [skip ci] 2023-06-19 20:58:51 -04:00
embeddedt
6006026deb
Merge 1.19.4 into 1.20 2023-06-19 20:58:13 -04:00
embeddedt
00b6261a1c
Merge 1.19.2 into 1.19.4 2023-06-19 20:58:13 -04:00
embeddedt
ce9d5f78e2
Merge 1.16 into 1.18 2023-06-19 20:58:11 -04:00
embeddedt
e75aca9236
Merge 1.18 into 1.19.2 2023-06-19 20:58:11 -04:00
embeddedt
aa3fa93a9f
Add framework to load specific mod classes sequentially, preventing deadlocks 2023-06-19 20:57:07 -04:00
embeddedt
683f9fd13b
1.20.1 2023-06-19 20:38:33 -04:00
embeddedt
5d2310bda4 Fix incorrect classname in Valhelsia Structures patch
Looks like this was broken during the multiloader refactor

Related: #135
2023-06-19 18:54:26 -04:00
embeddedt
18e1cec611
Merge 1.19.4 into 1.20 2023-06-15 22:14:57 -04:00
embeddedt
4d47ca26db
Fix miscopied patch from Fabric to Forge 2023-06-15 22:14:39 -04:00
embeddedt
42d41eb0f7
Merge 1.19.4 into 1.20 2023-06-14 22:14:23 -04:00
embeddedt
fea1d35d08
Merge 1.19.2 into 1.19.4 2023-06-14 22:14:22 -04:00
embeddedt
2414f87a86
Merge 1.16 into 1.18 2023-06-14 22:14:21 -04:00
embeddedt
15ed114e87
Merge 1.18 into 1.19.2 2023-06-14 22:14:21 -04:00
embeddedt
f7037e3ecb
Change cancellation strategy for bakeModels, fixes Balm issues 2023-06-14 22:14:13 -04:00
embeddedt
a72ebc4c26
Avoid printing "automatic merge went well" message [skip ci] 2023-06-13 17:53:05 -04:00
embeddedt
75bd0a5ff7
Merge 1.19.4 into 1.20 2023-06-13 17:52:45 -04:00
embeddedt
c3a5964f17
Merge 1.19.2 into 1.19.4 2023-06-13 17:52:45 -04:00
embeddedt
9bd8870ef9
Merge 1.16 into 1.18 2023-06-13 17:52:43 -04:00
embeddedt
cb6f595cc3
Merge 1.18 into 1.19.2 2023-06-13 17:52:43 -04:00
embeddedt
f7d66257fb
Allow resolving merge conflicts inside propagator [skip ci] 2023-06-13 17:52:31 -04:00
embeddedt
9aa96b4d03
Merge 1.19.4 into 1.20 2023-06-13 17:41:04 -04:00
embeddedt
0765b6770f
Fix creative search tab not having a populator registered on Fabric 2023-06-13 17:40:40 -04:00
embeddedt
761417833e
Merge 1.19.4 into 1.20 2023-06-12 21:58:58 -04:00
embeddedt
e5ab4df3dc
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-12 21:58:51 -04:00
embeddedt
12345a67e8
Merge 1.18 into 1.19.2 2023-06-12 21:57:43 -04:00
embeddedt
440cc21d8c
Merge 1.16 into 1.18 2023-06-12 21:57:42 -04:00
embeddedt
d242431e9a
Change dynamic_dfu to return real schemas as well 2023-06-12 21:57:22 -04:00
embeddedt
173d71b04f
Merge 1.19.4 into 1.20 2023-06-12 10:56:16 -04:00
embeddedt
6df837f9ba
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-12 10:56:06 -04:00
embeddedt
eea53ee9ef
Merge 1.18 into 1.19.2 2023-06-12 10:55:52 -04:00
embeddedt
7fb65f5144
Merge 1.16 into 1.18 2023-06-12 10:55:51 -04:00
embeddedt
916710eb77
Add yet another texture folder 2023-06-12 10:55:31 -04:00
embeddedt
d352c9e8ca
Mark 1.20.1 as supported 2023-06-12 10:46:56 -04:00
embeddedt
e5cc8ef97c
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-06-12 10:46:44 -04:00
embeddedt
af63a6ca09
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-12 10:46:33 -04:00
embeddedt
a13e8d98e1
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-06-12 10:45:39 -04:00
embeddedt
5136889c3e
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-06-12 10:43:52 -04:00
embeddedt
9c76052be0
Fix CF publishing 2023-06-12 10:42:33 -04:00
embeddedt
fcd6663835
Move curseforge/modrinth code into common file 2023-06-12 10:40:10 -04:00
embeddedt
cfd3920c8c
Add tickable object framework 2023-06-12 10:24:49 -04:00
embeddedt
a7e5147104
Merge 1.19.4 into 1.20 2023-06-11 21:32:24 -04:00
embeddedt
017d81a8c6
Merge 1.19.2 into 1.19.4 2023-06-11 21:32:23 -04:00
embeddedt
77436644aa
Merge 1.18 into 1.19.2 2023-06-11 21:32:22 -04:00
embeddedt
31ba30d101
Merge 1.16 into 1.18 2023-06-11 21:32:21 -04:00
embeddedt
b0ab187da8
Add autorelease script [skip ci] 2023-06-11 21:21:27 -04:00
embeddedt
cc6191cef2
Merge 1.19.4 into 1.20 2023-06-11 21:03:06 -04:00
embeddedt
9aa28c3e3f
Merge 1.19.2 into 1.19.4 2023-06-11 21:03:05 -04:00
embeddedt
055d27a9f6
Merge 1.18 into 1.19.2 2023-06-11 21:03:04 -04:00
embeddedt
140e19dffe
Merge 1.16 into 1.18 2023-06-11 21:03:03 -04:00
embeddedt
74a3e4ed2b
Ensure bin is populated by release runner [skip ci] 2023-06-11 21:02:48 -04:00
embeddedt
002ff639a0
Merge 1.19.4 into 1.20 2023-06-11 20:48:20 -04:00
embeddedt
826694793c
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-11 20:46:55 -04:00
embeddedt
4699b9be7a
Merge 1.18 into 1.19.2 2023-06-11 20:44:58 -04:00
embeddedt
ec9ce77ace
Merge 1.16 into 1.18 2023-06-11 20:44:57 -04:00
embeddedt
99e030ce27
Add script for auto-propagating changes to modern branches where possible [skip ci] 2023-06-11 20:44:39 -04:00
embeddedt
22c52171d9
Merge 1.18 into 1.19.2 2023-06-11 20:43:21 -04:00
embeddedt
cff1363050
Merge 1.16 into 1.18 2023-06-11 20:43:20 -04:00
embeddedt
02a68f7689
Fix Wizards spell textures being missing 2023-06-11 20:06:42 -04:00
embeddedt
a2d82472a4
Add automated, ephemeral release workflow [skip ci] 2023-06-09 13:05:40 -04:00
embeddedt
48924e3364
Allow DashLoader 5 on 1.19.4+ 2023-06-09 12:46:08 -04:00
embeddedt
79c4b1cb27
Re-add Forge support for 1.20 2023-06-08 09:34:41 -04:00
embeddedt
b1bfcfb190
1.20 2023-06-07 11:56:11 -04:00
embeddedt
7ab2dac645
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-06-07 11:47:24 -04:00
embeddedt
702fe0ba24
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-07 11:47:12 -04:00
embeddedt
755bc35d09
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-06-07 11:45:27 -04:00
embeddedt
a7e93ad8f9
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-06-06 19:18:14 -04:00
embeddedt
57e1e54441
Tweak faster_texture_loading injection point for compatibility 2023-06-06 19:12:03 -04:00
embeddedt
7bbc10acc3
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-06-06 12:51:48 -04:00
embeddedt
690e1b7f8a
Remove MC version from archive base name 2023-06-06 12:51:39 -04:00
embeddedt
ca4f2a2aeb
Merge remote-tracking branch 'origin/1.19.2' into 1.20 2023-06-06 12:50:50 -04:00
embeddedt
531b5d58ba
Re-add new versioning logic (was somehow dropped during merge) 2023-06-06 12:50:36 -04:00
embeddedt
aedbc88e3c
Update to 1.20-rc1 2023-06-06 12:28:30 -04:00
embeddedt
f9cbd8fa61
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-06-06 12:01:21 -04:00
embeddedt
a614c050e7
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-06 11:57:49 -04:00
embeddedt
931bf29c47
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-06-06 11:52:49 -04:00
embeddedt
313981f30e
Merge remote-tracking branch 'origin/1.16' into 1.18 2023-06-06 11:49:01 -04:00
embeddedt
b4470eb520
Change dev build link [skip ci] 2023-06-06 11:45:11 -04:00
embeddedt
5de87576ca
Ensure CTM's metadataCache is thread-safe 2023-06-06 11:35:02 -04:00
embeddedt
4d54c624e1
Avoid CME during Indigo model bake on Fabric 2023-06-05 21:55:16 -04:00
embeddedt
489a30d185
New versioning scheme 2023-06-05 21:31:43 -04:00
embeddedt
3996804e71
Merge remote-tracking branch 'origin/main' into 1.18 2023-06-05 19:46:52 -04:00
embeddedt
b430b67052
Return missing model for null BlockState 2023-06-05 19:43:25 -04:00
embeddedt
54759008e5
Allow Fabric version to run on >=1.16.2 2023-06-03 20:01:34 -04:00
embeddedt
41c2bb733e
Add name change easter egg when running on snapshots 2023-06-03 20:01:19 -04:00
embeddedt
673e6dec8d
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-03 11:40:31 -04:00
embeddedt
f8771a260c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-06-03 11:31:37 -04:00
embeddedt
39531aba0e
Merge remote-tracking branch 'origin/main' into 1.18 2023-06-03 11:27:32 -04:00
embeddedt
941331f90a
Compatibility improvements for mixin.perf.nbt_memory_usage
Related: #119
2023-06-03 11:26:44 -04:00
embeddedt
a635671276
This will likely be the last ever 1.19.4 release 2023-06-02 20:17:13 -04:00
embeddedt
144bdaa301
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-06-02 20:14:14 -04:00
embeddedt
444f5ad446
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-06-02 20:10:53 -04:00
embeddedt
32aa4794d0
Merge remote-tracking branch 'origin/main' into 1.18 2023-06-02 20:09:12 -04:00
embeddedt
db223b62a0
Advancement recursion speedup on Forge, based off Advancements Debug 2023-06-02 12:06:34 -04:00
embeddedt
618698aab3
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-06-01 21:28:05 -04:00
embeddedt
b610a21b37
Merge remote-tracking branch 'origin/main' into 1.18 2023-06-01 21:14:19 -04:00
embeddedt
39e1ac0896
Simplify item rendering optimization
Now uses a wrapped item model instead of actually modifying
the rendering code, to avoid disabling Sodium's optimization
2023-06-01 21:11:54 -04:00
embeddedt
945027295a
Merge remote-tracking branch 'origin/main' into 1.18 2023-06-01 19:55:10 -04:00
embeddedt
c8bce3e015
Disable bugfix.chunk_deadlock for DimThread
Related: #118
2023-06-01 19:54:18 -04:00
embeddedt
4b73d699e4
Disable packet leak fix when MemoryLeakFix is present on Fabric 2023-06-01 19:45:19 -04:00
embeddedt
1a7d5b3436
Decommission the chunk saving fix
Does not actually fix the issue, sadly
2023-06-01 19:39:21 -04:00
embeddedt
b15537a32f
Make CanonizingStringMap not crash on null keys/values 2023-05-31 09:37:34 -04:00
embeddedt
830eb19420
Hopefully final fix for the 1.19.4 "missing model" bug on Fabric 2023-05-30 11:18:27 -04:00
embeddedt
76485b0cba
Fix Skyblock Builder crash
Related: #117
2023-05-30 10:43:08 -04:00
embeddedt
cb22591182
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-30 10:34:03 -04:00
embeddedt
8c061ec070
Support new REI version
Related: #116
2023-05-30 10:27:47 -04:00
embeddedt
4a9cd78d1d
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-29 20:39:14 -04:00
embeddedt
0f4e835f6c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-29 20:19:01 -04:00
embeddedt
39939076e7
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-29 20:18:34 -04:00
embeddedt
3dbff477e9
Improve structure cache wording 2023-05-29 18:29:11 -04:00
embeddedt
d51de3fa55
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-29 10:19:21 -04:00
embeddedt
f1811bbbc6
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-29 10:17:59 -04:00
embeddedt
a7d894cbc2
Disable cache invalidation outside dev
Not needed as mod contents shouldn't change (right...)
2023-05-29 10:16:54 -04:00
embeddedt
04f34a00fa
Fix resource pack cache not working as well as it could 2023-05-29 10:15:18 -04:00
embeddedt
d89f8da5a2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-28 22:21:08 -04:00
embeddedt
b8850b2aae
Only use JEI backed search tree if EMI is not installed 2023-05-28 22:17:03 -04:00
embeddedt
f4b2db89ec
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-27 10:28:35 -04:00
embeddedt
5a09f27c6a
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-27 10:28:00 -04:00
embeddedt
c4a50bb6e2
Replace default backing map of NBT tags in more compatible way
Related: #111
2023-05-27 10:12:05 -04:00
embeddedt
b5d62b4bbb
Add off-by-default feature to automatically thread dump every 60 seconds 2023-05-26 11:55:57 -04:00
embeddedt
214b39ce8f
Fixes for LBG+Diagonal Fences together 2023-05-23 21:02:27 -04:00
embeddedt
a327b460bb
Tweak dynamic texture mixin 2023-05-23 20:30:22 -04:00
embeddedt
ddf2fc5a74
Provide more useful information if the image used in DynamicTexture is null 2023-05-23 19:29:24 -04:00
embeddedt
74eb8a0619
Split unbaked model load event into load and pre-bake stages
Allows mods like Continuity to wrap the model being baked
separately from the model in the cache
2023-05-23 18:50:49 -04:00
embeddedt
2bd2fd7ef7
Only inject integration first time 2023-05-23 16:38:34 -04:00
embeddedt
baca029fd0
Add support for Diagonal Fences 2023-05-23 14:59:46 -04:00
embeddedt
0f180ff979
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-23 14:50:41 -04:00
embeddedt
86e748dd93
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-23 14:47:48 -04:00
embeddedt
be4c8607d4
Disable faster texture loader if Changed:MC is installed
Related: #108
2023-05-23 11:53:28 -04:00
embeddedt
bd94b5dd2e
Spotless 2023-05-22 14:40:26 -04:00
embeddedt
31feef398f
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-22 14:24:27 -04:00
embeddedt
49a8f72151
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-22 13:50:27 -04:00
embeddedt
675e3bb08b
Fix startup crash introduced in last commit 2023-05-22 13:49:08 -04:00
embeddedt
aae4db7ebf
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-22 13:27:20 -04:00
embeddedt
80617c24f1
Work around KeyMapping names being retrieved off-thread 2023-05-22 13:25:14 -04:00
embeddedt
61eca643d4
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-21 22:14:48 -04:00
embeddedt
b6a0767d03
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-21 22:14:36 -04:00
embeddedt
91c2d50d97
Add more texture paths 2023-05-21 22:14:17 -04:00
embeddedt
d428f9c4c0
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-21 20:57:15 -04:00
embeddedt
09b4021e23
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-21 20:25:59 -04:00
embeddedt
cfd542623c
Fire model integrations on Fabric 2023-05-21 20:24:28 -04:00
embeddedt
f48ed1212b
Move AE2 dynamic resources compat to common module 2023-05-21 20:17:38 -04:00
embeddedt
117febba6d
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-21 20:08:28 -04:00
embeddedt
fc65975252
Fix AE2 mod id 2023-05-21 20:08:17 -04:00
embeddedt
7517c36b36
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-21 19:17:39 -04:00
embeddedt
0a035b6e0d
Back client integration list with COW arraylist 2023-05-21 17:11:51 -04:00
embeddedt
a22308fb89
Depend on full Fabric API at runtime 2023-05-21 17:08:45 -04:00
embeddedt
98da673cbe
Tweak point at which dummy models are cleared on Fabric 2023-05-21 17:04:22 -04:00
embeddedt
c2f09fb998
Merge branch 'mod-api' 2023-05-21 15:24:46 -04:00
embeddedt
bb6d498d58
Disable faster_texture_loading and faster_texture_stitching when Opticrash is present
Fixes #91
2023-05-21 14:11:05 -04:00
embeddedt
0d901c6281
Only preserve window position if a non-default width/height was given
Fixes #103 (in next release)
2023-05-20 16:35:56 -04:00
embeddedt
d5bd392cff
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-20 12:37:04 -04:00
embeddedt
962b843199
Avoid exposing mods to exceptions when baking models 2023-05-20 12:35:33 -04:00
embeddedt
4cccd8f6d9
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-17 17:46:31 -04:00
embeddedt
bd1182ab39
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-17 17:45:49 -04:00
embeddedt
a25252714d
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-17 17:12:19 -04:00
embeddedt
c51d7ae641
Use half fix for packet leak 2023-05-17 16:51:56 -04:00
embeddedt
0d4a12eafe
Revert "Hopefully more stable version of the original packet fix"
This reverts commit b21ee9a7e7.
2023-05-17 16:51:25 -04:00
embeddedt
f67fa07546
Synchronize LivingEntityRenderer layer list
Related: #102
2023-05-17 16:50:08 -04:00
embeddedt
adbf61a06b
1.20-pre2 2023-05-16 11:27:08 -04:00
embeddedt
b44739e33c
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-05-16 11:21:43 -04:00
embeddedt
340b026951
Remove unneeded imports 2023-05-16 11:21:34 -04:00
embeddedt
30bf3afc1d
Merge remote-tracking branch 'origin/1.19.4' into 1.20 2023-05-16 11:18:10 -04:00
embeddedt
119f9ec6dd
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-16 11:11:00 -04:00
embeddedt
3a24d094c9
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-16 11:01:46 -04:00
embeddedt
dba6e1210e
Fix classloading hack not working anymore 2023-05-16 10:17:12 -04:00
embeddedt
b25234e431
Fix search tree provider crash 2023-05-16 10:16:32 -04:00
embeddedt
f633d9b3bf
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-15 22:21:02 -04:00
embeddedt
4fa0602af9
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-15 22:20:25 -04:00
embeddedt
f22dbf5df1
Use less invasive mixin on Blocks.rebuildCache()
Related: #99
2023-05-15 22:19:54 -04:00
embeddedt
8ee985928e
Add JEI plugin to fabric.mod.json 2023-05-15 21:27:05 -04:00
embeddedt
98def7b879
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-15 21:23:01 -04:00
embeddedt
6f8815200e
Move search tree replacement to common module 2023-05-15 21:05:01 -04:00
embeddedt
4a0b633970
Fix workaround message printing twice 2023-05-15 21:04:01 -04:00
embeddedt
32c1baf887
Move search tree replacement to common, support both modloaders 2023-05-15 20:23:37 -04:00
embeddedt
d2d5f81782
Bump required Forge version, drop datapack reload patch
https://github.com/MinecraftForge/MinecraftForge/pull/9454 has been
merged upstream
2023-05-15 19:43:31 -04:00
embeddedt
04c89a26ed
Workaround for Forge issue #9505 2023-05-15 13:28:40 -04:00
embeddedt
b1fb365f22
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-15 11:14:20 -04:00
embeddedt
fc69d55314
Fix compile error 2023-05-15 11:11:09 -04:00
embeddedt
ee3f29c569
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-15 11:09:39 -04:00
embeddedt
f599acda6b
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-15 11:07:31 -04:00
embeddedt
c1c9c02ff4
Remove blockstate compression 2023-05-14 20:27:37 -04:00
embeddedt
b21ee9a7e7
Hopefully more stable version of the original packet fix 2023-05-14 19:59:39 -04:00
embeddedt
0f2764b79d
Revert "Fix incorrect logic in packet leak patch"
This reverts commit 45d308c6a4.
2023-05-14 19:48:57 -04:00
embeddedt
8510d648aa
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-14 19:34:32 -04:00
embeddedt
33d7b6f67b
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-14 19:26:03 -04:00
embeddedt
9ca4961841
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-14 19:25:48 -04:00
embeddedt
eb925bc3ba
Fix performance issue when loading large NBT maps
Array map was not being changed to hash map until AFTER the insertions,
which is bad
2023-05-14 19:24:56 -04:00
embeddedt
a7e64f2947
Fix performance issue when loading large NBT maps
Array map was not being changed to hash map until AFTER the insertions,
which is bad
2023-05-14 19:23:36 -04:00
embeddedt
b4ffe68adb
Replace Forge dynamic model bake event with modloader-independent custom solution 2023-05-13 16:37:20 -04:00
embeddedt
45d308c6a4
Fix incorrect logic in packet leak patch
Related: #97
2023-05-13 09:36:34 -04:00
embeddedt
a1f50a0c4f
Fix missing model flag not being cleared at times 2023-05-12 10:52:18 -04:00
embeddedt
5e4b08a8f5
Add support for Fabric datagen from runClient 2023-05-11 14:14:56 -04:00
embeddedt
57947441ce
Spotless 2023-05-11 11:33:32 -04:00
embeddedt
f1515c5063
1.20-pre1 2023-05-11 11:27:22 -04:00
embeddedt
ec10f36839
Fix compile errors 2023-05-11 11:27:10 -04:00
embeddedt
05b28b8269
Fix spotless error 2023-05-11 11:01:49 -04:00
embeddedt
9c421218b8
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-11 10:51:34 -04:00
embeddedt
2de8f02814
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-11 10:39:33 -04:00
embeddedt
9efbc47f78
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-11 10:37:59 -04:00
embeddedt
d427c5e050
Invalidate pack caches directly instead of iterating resource manager pack list 2023-05-10 18:12:32 -04:00
embeddedt
dffb89390e
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-10 18:07:50 -04:00
embeddedt
d97da8fe4c
Fix resource pack cache not invalidating on F3+T 2023-05-10 17:02:15 -04:00
embeddedt
74dae9316e
Update patch for 1.19 2023-05-10 15:41:38 -04:00
embeddedt
acdd18f8df
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-10 15:39:22 -04:00
embeddedt
14b4ea7eb1
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-10 15:39:11 -04:00
embeddedt
b5c08b996f
Add button to title screen for datagenning inside runClient 2023-05-10 15:29:46 -04:00
embeddedt
6eddbd1ecf
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-10 11:45:41 -04:00
embeddedt
6bda05a5fc
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-10 11:44:10 -04:00
embeddedt
1f16fc0204
Move iteration later in texture atlas patch 2023-05-10 11:42:16 -04:00
embeddedt
8c278d6555
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-10 09:56:43 -04:00
embeddedt
bc493d624f
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-10 09:56:23 -04:00
embeddedt
bcb33a1018
Shorten structure hashes to fix issues on Windows 2023-05-10 09:54:14 -04:00
embeddedt
03abdfdc49
Optimize server thread aliveness check 2023-05-09 16:52:10 -04:00
embeddedt
127a85ea89
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 20:17:29 -04:00
embeddedt
dc8c9832d2
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 20:16:44 -04:00
embeddedt
d70480eb17
More Fabric dynamic model loading improvements 2023-05-08 20:16:24 -04:00
embeddedt
ed65d5da44
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 19:20:43 -04:00
embeddedt
b13d0a222b
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 19:20:00 -04:00
embeddedt
d33ebd69e8
Fix texture reload failing on second try 2023-05-08 19:17:00 -04:00
embeddedt
dcd30d34da
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 18:05:08 -04:00
embeddedt
0a5ca4fcf4
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 18:04:44 -04:00
embeddedt
9d4d1cc9b4
Add more paths to texture search 2023-05-08 18:04:23 -04:00
embeddedt
fc9aff6217
Enable GitHub Gradle cache 2023-05-08 17:59:28 -04:00
embeddedt
9879420d31
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 16:39:53 -04:00
embeddedt
1639f4297e
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 16:39:38 -04:00
embeddedt
9e44e00e70
Fix Continuity emissives 2023-05-08 16:39:01 -04:00
embeddedt
33f689ba9a
Make RenderType EqualsStrategy more predictable 2023-05-08 16:15:15 -04:00
embeddedt
fe7357bca2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 15:50:11 -04:00
embeddedt
3e17d24250
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 15:50:02 -04:00
embeddedt
cd2f289ea8
Disable faster texture loading when Stitch is present 2023-05-08 15:49:47 -04:00
embeddedt
28bbb79e60
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 15:38:49 -04:00
embeddedt
6c896c36bf
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 15:38:30 -04:00
embeddedt
5ee4c636e7
Adjust faster texture loading for FAPI compat 2023-05-08 15:38:16 -04:00
embeddedt
c4ee1dd522
Update incompatible mod disabling list 2023-05-08 15:06:15 -04:00
embeddedt
78da1157ab
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 14:55:42 -04:00
embeddedt
21a9266c8f
Update patch for 1.19 2023-05-08 14:54:31 -04:00
embeddedt
e724cbfa63
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 14:53:38 -04:00
embeddedt
656f3924da
Avoid running Fabric loading hook except for extra models 2023-05-08 14:53:23 -04:00
embeddedt
985b5a68fe
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 14:24:27 -04:00
embeddedt
f6bcb8d1ab
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 14:24:22 -04:00
embeddedt
833fdc9ae5
Minor optimization when turning MRL into blockstate list 2023-05-08 14:22:50 -04:00
embeddedt
41fa422160
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 14:15:33 -04:00
embeddedt
85025b77fb
Set the missing model early if needed 2023-05-08 14:15:22 -04:00
embeddedt
5b57b238c3
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 14:14:37 -04:00
embeddedt
c420c63ab1
Handle bakedTopLevelModels not being a dynamic provider yet 2023-05-08 14:14:20 -04:00
embeddedt
4a47ed7f43
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 14:11:15 -04:00
embeddedt
992269034d
Rewrite Fabric dynamic model loader to not load all models at startup 2023-05-08 14:10:54 -04:00
embeddedt
b89e7639cd
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 10:42:36 -04:00
embeddedt
c8c7d3ef2e
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 10:42:28 -04:00
embeddedt
9e7c82a303
Disable datapack_reload_exceptions if Cyanide is installed as it overlaps 2023-05-08 10:41:53 -04:00
embeddedt
1760041e56
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 10:18:59 -04:00
embeddedt
4239bb325d
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 10:18:33 -04:00
embeddedt
b955f17fbd
Do resource cache generation on-thread, but lazily
Apparently ForkJoinPools can deadlock even though they are not
supposed to
2023-05-08 10:17:24 -04:00
embeddedt
8e4bbeff28
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 09:59:20 -04:00
embeddedt
cc9e7289c6
Fix compile error 2023-05-08 09:59:05 -04:00
embeddedt
6a8c7c10a6
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 09:58:29 -04:00
embeddedt
2f8f47ae3e
Ensure the context class loader is set for the resource reload executors 2023-05-08 09:57:53 -04:00
embeddedt
df6127f528
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 09:45:38 -04:00
embeddedt
c63252946a
Fix JEI creative search tree replacement not working
Fixes #86
2023-05-08 09:44:44 -04:00
embeddedt
60140bdc1e
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 09:25:55 -04:00
embeddedt
558ced7497
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 09:25:51 -04:00
embeddedt
d8d76c00c7
Hotfix for another potential race condition 2023-05-08 09:25:40 -04:00
embeddedt
403e820f55
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-08 09:05:14 -04:00
embeddedt
d681fbd507
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-08 09:05:00 -04:00
embeddedt
530fb5f796
Hotfix for potential resource reload race condition 2023-05-08 09:04:43 -04:00
embeddedt
bcb1f5db6c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-07 21:45:23 -04:00
embeddedt
20b85f7567
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-07 21:45:18 -04:00
embeddedt
387e48cca8
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-07 21:44:31 -04:00
embeddedt
43c1ed7029
Disable faster item rendering by default until its tested more 2023-05-07 21:39:25 -04:00
embeddedt
ad0c6b7a55
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-07 21:15:35 -04:00
embeddedt
604c3687ef
Optimize block item rendering as well 2023-05-07 21:07:56 -04:00
embeddedt
b55129a8ca
Generate resource cache using resource reload workers 2023-05-07 18:08:00 -04:00
embeddedt
92c136d4c3
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-07 14:40:28 -04:00
embeddedt
321c676fd0
Disable dynamic entity renderers by default due to incompatible mods 2023-05-07 14:39:55 -04:00
embeddedt
1aa582383c
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-07 14:39:44 -04:00
embeddedt
65e12016b6
Add config for integrated server watchdog 2023-05-07 14:07:17 -04:00
embeddedt
3ba38b602a
Remove nonexistent mixin configs 2023-05-07 13:57:52 -04:00
embeddedt
a1cdf756ab
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-06 17:06:04 -04:00
embeddedt
c30574c3d0
Only apply item rendering optimization outside of level rendering 2023-05-06 16:40:49 -04:00
embeddedt
163ac96cd7
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-06 16:20:18 -04:00
embeddedt
08c774e818
Fix Command API dependency 2023-05-06 16:20:05 -04:00
embeddedt
c229b1c60c
Update item renderer mixin for 1.19.4 2023-05-06 16:18:47 -04:00
embeddedt
422b6d56f7
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-06 16:07:10 -04:00
embeddedt
e84360efe9
Update item rendering patch for 1.19.2 2023-05-06 15:33:25 -04:00
embeddedt
44882e5418
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-06 15:27:22 -04:00
embeddedt
a2568c486e
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-06 15:22:06 -04:00
embeddedt
53cf31fe15
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-06 15:21:58 -04:00
embeddedt
deac0b43d1
Optimize rendering of simple items in GUIs 2023-05-06 15:20:40 -04:00
embeddedt
2e669761bd
Remove unnecessary injected field on BlockState 2023-05-06 12:57:15 -04:00
embeddedt
7eb702545b
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-06 11:46:15 -04:00
embeddedt
a139b273c9
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-06 11:45:06 -04:00
embeddedt
d4fec79e55
Change texture loading mixin priority to prevent FAPI conflicts 2023-05-06 11:43:11 -04:00
embeddedt
f506fc671a
Remove blank space [skip ci] 2023-05-06 11:23:10 -04:00
embeddedt
218c3e84d3
Fix GitHub markdown formatting being different [skip ci] 2023-05-06 11:22:50 -04:00
embeddedt
8beadf828c
Add dev builds to README [skip ci] 2023-05-06 11:22:27 -04:00
embeddedt
48f9ad86f0
Prevent immediate crash when TextureAtlasSprite constructor throws
Fixes #79
2023-05-06 11:21:08 -04:00
embeddedt
74c2c28a66
Avoid hard crash if AT fails to apply 2023-05-06 11:17:46 -04:00
embeddedt
650bd0bfb9
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-05 13:30:31 -04:00
embeddedt
9e021ce7e3
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-05 13:28:42 -04:00
embeddedt
4125f2a0e0
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-05 13:26:38 -04:00
embeddedt
cf1f60aa2b
Adjust release script [skip ci] 2023-05-05 13:26:20 -04:00
embeddedt
f69c25a7b2
Preparing for release 2023-05-05 13:20:23 -04:00
embeddedt
62d7347077
Mark Fabric releases as beta 2023-05-05 13:19:24 -04:00
embeddedt
10c95c68d8
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-05 12:04:43 -04:00
embeddedt
8996d4e09b
Remove entity renderer mixin as it's not needed on 1.18 2023-05-05 12:03:22 -04:00
embeddedt
3b4354fbe5
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-05 12:03:15 -04:00
embeddedt
9677eb6c02
Provide more debug information if entity renderer is missing 2023-05-05 12:02:52 -04:00
embeddedt
367cc372c2
Workaround for runtime resource packs that aren't thread safe
Related: https://github.com/Fuzss/diagonalfences/issues/38
2023-05-05 11:27:07 -04:00
embeddedt
95ee0c60ca
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-05 10:53:30 -04:00
embeddedt
1f4e45eca6
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-05 10:50:34 -04:00
embeddedt
b80afc2c79
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-05 10:47:15 -04:00
embeddedt
9455b5628e
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-05 10:46:47 -04:00
embeddedt
cc36e0c3f1
Ensure Lithium's cache fields get generated
Fixes #74
2023-05-05 10:45:59 -04:00
embeddedt
12623012ed
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-05 09:52:34 -04:00
embeddedt
3f82c7459a
Fix crash with Charm 2023-05-05 09:51:46 -04:00
embeddedt
385d12e159
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-05 09:44:15 -04:00
embeddedt
2cdc8b88a5
Make block model cache overridable for even more invasive mods 2023-05-05 09:38:36 -04:00
embeddedt
e6f30956db
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-04 22:01:11 -04:00
embeddedt
b744cc7452
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 21:55:48 -04:00
embeddedt
77e2175123
Fix material cache on Fabric
Fixes #72
2023-05-04 21:54:57 -04:00
embeddedt
85442810f3
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-04 19:56:21 -04:00
embeddedt
74007827f9
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 19:56:13 -04:00
embeddedt
8d7b351d53
Increase eviction time 2023-05-04 19:55:57 -04:00
embeddedt
da100bea60
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 19:54:35 -04:00
embeddedt
b077b53132
Bump maximum models in memory from 1k to 10k 2023-05-04 19:53:39 -04:00
embeddedt
0f449d05aa
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-04 17:16:10 -04:00
embeddedt
e7e5ececa6
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 17:14:03 -04:00
embeddedt
249e662ca2
Mark ModernFix as breaking DashLoader 2023-05-04 17:13:46 -04:00
embeddedt
0833d4dd56
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-04 17:06:34 -04:00
embeddedt
1fa039d331
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 17:05:47 -04:00
embeddedt
6c56096556
Emulate the vanilla block/item -> model maps for Fabric mods 2023-05-04 17:05:02 -04:00
embeddedt
50d02a8058
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 16:10:35 -04:00
embeddedt
2b8fc0827c
Bake non-vanilla models on Fabric and then throw away the cache 2023-05-04 15:55:52 -04:00
embeddedt
5260d55f91
New README [skip ci] 2023-05-04 14:06:27 -04:00
embeddedt
170da33755
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-04 11:47:58 -04:00
embeddedt
05901b4514
Clearer message 2023-05-04 11:43:06 -04:00
embeddedt
270fec309e
Complain once per mod ID if an outdated structure is found 2023-05-04 11:42:25 -04:00
embeddedt
912a8f9f2c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-04 11:17:44 -04:00
embeddedt
7e7f336ccb
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 11:17:23 -04:00
embeddedt
4796af2094
Fix DFU blaster making DFU too slow 2023-05-04 11:16:16 -04:00
embeddedt
d4cf8503cd
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-04 10:27:13 -04:00
embeddedt
168983c972
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 10:26:07 -04:00
embeddedt
11a37d59ec
Ignore exceptions thrown by structure upgrade command 2023-05-04 10:25:47 -04:00
embeddedt
1fbf83c562
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-04 10:22:23 -04:00
embeddedt
b3da731e1f
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-04 10:18:45 -04:00
embeddedt
26bc9514d7
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-04 10:15:26 -04:00
embeddedt
8b9d3cab18
Add Mod Menu compatibility 2023-05-04 10:08:58 -04:00
embeddedt
65f151bbef
Actually cache item models 2023-05-03 21:40:57 -04:00
embeddedt
545c68f122
Rewrite 1.19.4 Fabric model baker mixin for compatibility purposes 2023-05-03 19:59:48 -04:00
embeddedt
d4bfe17a72
Tweak Fabric model bakery to run more vanilla code 2023-05-03 19:23:43 -04:00
embeddedt
2a7733e61f
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-03 11:16:34 -04:00
embeddedt
d658c18566
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-03 10:38:33 -04:00
embeddedt
ac97dfd8c4
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-03 10:37:11 -04:00
embeddedt
9d7f897dae
Get Continuity working on Fabric 2023-05-03 10:32:32 -04:00
embeddedt
f1cdbc339b
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-03 10:17:41 -04:00
embeddedt
1b10ed3f66
Keep custom models loaded permanently on Fabric 2023-05-03 10:14:43 -04:00
embeddedt
74cf6ef598
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-02 22:02:41 -04:00
embeddedt
8f71606fad
Fix entity renderer crash in some modpacks 2023-05-02 22:00:49 -04:00
embeddedt
3ad3da3680
Fix resource cache not being generated on Forge 2023-05-02 21:03:40 -04:00
embeddedt
2aacadaa82
Fix incorrectly mapped mixin 2023-05-02 20:58:52 -04:00
embeddedt
ae33070507
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-02 20:24:48 -04:00
embeddedt
e1b29f2985
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-02 20:20:12 -04:00
embeddedt
215e8da87d
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-02 20:10:46 -04:00
embeddedt
2772351a3d
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-02 20:10:40 -04:00
embeddedt
243bf03440
Fix spotless 2023-05-02 20:09:07 -04:00
embeddedt
6a85047132
Add structure upgrading command 2023-05-02 20:04:54 -04:00
embeddedt
969c3fd18e
Update entity renderer mixin 2023-05-02 19:24:42 -04:00
embeddedt
f62aac1c77
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-02 19:23:34 -04:00
embeddedt
8d1a73c339
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-02 19:22:09 -04:00
embeddedt
71d7004d0c
Shrink oversized PalettedContainers 2023-05-02 19:19:57 -04:00
embeddedt
47e01693c5
Reimplement dynamic entity renderers 2023-05-02 16:14:23 -04:00
embeddedt
09c5cdb6a2
Drop resource pack mixin from 1.19.4 for now 2023-05-02 15:33:32 -04:00
embeddedt
cae1026fee
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-02 15:32:54 -04:00
embeddedt
393a834891
Update resource pack mixin 2023-05-02 15:02:42 -04:00
embeddedt
260d2a5f42
Merge remote-tracking branch 'origin/main' into 1.19.2 2023-05-02 14:58:14 -04:00
embeddedt
f9ff9eb6fb
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-02 14:57:48 -04:00
embeddedt
fb2929215f
Update 2023-05-02 14:57:35 -04:00
embeddedt
f7d247fb2c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-02 14:53:09 -04:00
embeddedt
3db4e9071f
Update resource pack mixin 2023-05-02 14:52:21 -04:00
embeddedt
6ec46aec1f
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-02 14:45:19 -04:00
embeddedt
f274dc1f5f
Add resource caching to Fabric 2023-05-02 14:44:48 -04:00
embeddedt
4d91bde49c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-02 14:16:56 -04:00
embeddedt
dbb28788d9
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-02 14:14:03 -04:00
embeddedt
a1246358ba
Load all models initially on Fabric for texture scanning 2023-05-02 14:13:35 -04:00
embeddedt
7ca647b763
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-02 11:20:58 -04:00
embeddedt
85d54292b2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-02 11:20:21 -04:00
embeddedt
5a3d519bab
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-02 11:19:38 -04:00
embeddedt
28f73454c3
Universal output directory 2023-05-02 11:18:39 -04:00
embeddedt
a29ffb252c
Fix some configs not being available 2023-05-02 11:18:30 -04:00
embeddedt
87958ff213
Make sure JEI doesn't reload without a client world 2023-05-02 10:47:07 -04:00
embeddedt
5edbe16e18
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-02 10:29:00 -04:00
embeddedt
8a06ef1322
Fix model bakery issues 2023-05-02 10:07:19 -04:00
embeddedt
0568c8f841
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-02 10:06:21 -04:00
embeddedt
0ad8c85cc4
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-02 10:05:34 -04:00
embeddedt
c415549f4e
Adjust Fabric model bakery mixin for compatibility 2023-05-02 08:26:45 -04:00
embeddedt
40acd71546
Fix JiJ 2023-05-02 08:15:39 -04:00
embeddedt
0de67936c1
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-01 21:30:01 -04:00
embeddedt
3f2a8dbb61
Fixes 2023-05-01 21:28:59 -04:00
embeddedt
e830fd9bef
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-01 21:25:21 -04:00
embeddedt
c66607d09d
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-01 21:25:02 -04:00
embeddedt
e2e6566eee
Use proper getOverlay method 2023-05-01 21:24:52 -04:00
embeddedt
fa9ac8c8ab
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-01 21:24:31 -04:00
embeddedt
ade8f2789b
Fix screen open firing too soon 2023-05-01 21:23:10 -04:00
embeddedt
6d8f90d303
Fix dynresources compat with Fabric API 2023-05-01 21:18:19 -04:00
embeddedt
25237eee8c
Add Arch transformer to gitignore 2023-05-01 21:12:26 -04:00
embeddedt
6879c6a274
Use unmapped name for shadow method 2023-05-01 21:12:14 -04:00
embeddedt
81a2b9cb56
Fix issues 2023-05-01 21:12:02 -04:00
embeddedt
01c1d73355
Use custom BakedModel as sentinel 2023-05-01 21:00:50 -04:00
embeddedt
ada0bd4012
Fix mixin 2023-05-01 20:50:56 -04:00
embeddedt
a06a46b498
Spotless 2023-05-01 20:47:24 -04:00
embeddedt
b746be4c67
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-01 20:46:16 -04:00
embeddedt
45b4b3a6f8
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-01 20:44:25 -04:00
embeddedt
fddac90db2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-01 20:42:59 -04:00
embeddedt
e704b25bc8
Fix AW 2023-05-01 20:42:46 -04:00
embeddedt
de00e21835
Clean up imports 2023-05-01 20:40:06 -04:00
embeddedt
efb9f4ca2d
Fabric 2023-05-01 20:38:47 -04:00
embeddedt
ea25f2e854
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-05-01 20:30:25 -04:00
embeddedt
1bdaf14eb5
Fabric 2023-05-01 19:50:58 -04:00
embeddedt
d9c2e0f342
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-01 19:46:23 -04:00
embeddedt
4df819b7ee
Fix ModelBakery mixin issue on Fabric 2023-05-01 19:15:55 -04:00
embeddedt
5ffac3bc3e
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-01 19:11:16 -04:00
embeddedt
64eb01987f
Package restructuring for modern FML 2023-05-01 19:05:08 -04:00
embeddedt
9dd9ef923c
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-01 18:37:26 -04:00
embeddedt
d76bce0d1c
Split artifact uploads 2023-05-01 16:56:31 -04:00
embeddedt
b6ae90d384
Multiloader 2023-05-01 16:55:26 -04:00
embeddedt
097bae35ab
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-01 10:41:44 -04:00
embeddedt
7221893e30
Fix search tree config value 2023-05-01 10:41:34 -04:00
embeddedt
723bb9d942
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-05-01 10:37:22 -04:00
embeddedt
6e134ab290
Merge remote-tracking branch 'origin/main' into 1.18 2023-05-01 10:33:22 -04:00
embeddedt
4097ba3cce
Generate mixin class list at build/run time 2023-05-01 10:19:55 -04:00
embeddedt
d0102af837
Fix potential issue if restitching is performed 2023-05-01 10:19:55 -04:00
狂想ThePotato
8a1dbc0543
Update zh_cn.json (#69) 2023-04-30 21:57:23 -04:00
embeddedt
e989411074
Compilation fixes 2023-04-30 19:39:04 -04:00
embeddedt
0ee41f262e
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-30 19:31:57 -04:00
embeddedt
d1f8560aaf
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-30 19:25:54 -04:00
embeddedt
be462e0e28
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-30 19:25:31 -04:00
embeddedt
7e87aae3f6
Hide LazyDFU missing warning in dev 2023-04-30 19:20:31 -04:00
embeddedt
cc78749e87
Remove LazyDFU from dev, as rule optimization would now only be
performed if older game data is loaded
2023-04-30 19:17:37 -04:00
embeddedt
fead01b142
Update LazyDFU warning 2023-04-30 19:17:04 -04:00
embeddedt
c561d818f3
Implement improved version of LazyDFU (having it installed is still beneficial)
Now DFU classes are not loaded until the first time DFU is actually
needed to update something. This saves quite a bit of RAM.

This is a better version of dedup_blockstate_flattening_map so the
latter is removed.
2023-04-30 19:09:56 -04:00
embeddedt
56d73ea9a2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-29 21:24:47 -04:00
embeddedt
62926fc13f
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-29 21:24:20 -04:00
embeddedt
7039bcada7
Reintroduce separate root listing list 2023-04-29 21:24:06 -04:00
embeddedt
a1eb62a176
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-29 21:09:33 -04:00
embeddedt
cf17272196
Fix devenv mixins not actually applying in 1.18 2023-04-29 21:03:44 -04:00
embeddedt
4b1464d6ad
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-29 20:59:50 -04:00
embeddedt
e7a1ce74cc
Move pack caching logic into separate version-independent class 2023-04-29 20:35:18 -04:00
embeddedt
fe0b82e6da
Fix RemoveBlockGoal permaloading chunks, remove START ticket entirely 2023-04-29 17:33:10 -04:00
embeddedt
609da0f545
Add option to remove spawn chunks 2023-04-29 16:50:02 -04:00
embeddedt
21177ea0e4
Fix mixin crash 2023-04-29 16:36:10 -04:00
embeddedt
50dc476ceb
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-29 16:04:43 -04:00
embeddedt
1ae3f9f319
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-29 15:24:02 -04:00
embeddedt
677a26cac1
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-29 15:13:37 -04:00
embeddedt
4cb7e552ea
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-29 15:04:38 -04:00
embeddedt
5ac369acb8
Fix some items not rendering in inventories 2023-04-29 14:06:53 -04:00
embeddedt
dc56d51f11
Split registry rewrite into separate off-by-default option
This needs more testing
2023-04-29 13:19:02 -04:00
embeddedt
cd069c016b
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-29 11:41:24 -04:00
embeddedt
4006551afe
Adjust mixin for 1.18 2023-04-29 11:36:59 -04:00
embeddedt
50f0723fb8
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-29 11:32:19 -04:00
embeddedt
99df4cbbe2
Add dynamic model support to Refined Storage 2023-04-29 11:26:01 -04:00
embeddedt
14f98e358b
Load every provided blockstate file, not just the first one 2023-04-29 11:17:28 -04:00
embeddedt
6768662f1d
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-29 10:34:53 -04:00
embeddedt
275266c85f
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-29 09:45:02 -04:00
embeddedt
960dd4074e
Clean up scanner + abstract pack scanning to separate function 2023-04-29 09:38:13 -04:00
embeddedt
9b50a50bad
Allow mutating CanonizingStringMap.keySet() 2023-04-29 09:22:55 -04:00
embeddedt
e4ef3103cc
Fix CTM crash 2023-04-29 09:17:41 -04:00
embeddedt
c0c789f29c
Fix registry replacement 2023-04-28 22:57:33 -04:00
embeddedt
6665db3a69
Only use the fallback path for models/blockstates not discovered yet 2023-04-28 22:34:44 -04:00
embeddedt
12a7483d4d
Add large registry test option 2023-04-28 22:06:35 -04:00
embeddedt
39e9dfab99
Use getResources on resource packs we can trust 2023-04-28 22:06:21 -04:00
embeddedt
8b71c823c4
Unbox IDs 2023-04-28 21:40:22 -04:00
embeddedt
c09c4ccf68
Optimize clear() 2023-04-28 21:33:57 -04:00
embeddedt
433db3409a
Continue optimizing 2023-04-28 21:30:51 -04:00
embeddedt
599bdee173
Refactor registry data into a custom object 2023-04-28 19:22:38 -04:00
embeddedt
3f24f50744
Initial version of fast registry 2023-04-28 19:14:31 -04:00
embeddedt
b9cb33b1ef
Dynamically generate item model location cache 2023-04-28 17:27:33 -04:00
embeddedt
77e9309d2b
Registry optimizations 2023-04-28 17:14:09 -04:00
embeddedt
4195b15946
Don't waste time interning paths we are checking exist 2023-04-28 15:53:51 -04:00
embeddedt
469c564c1b
Suppress model bakery errors if there are too many 2023-04-28 15:53:39 -04:00
embeddedt
f51808a000
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-28 15:12:37 -04:00
embeddedt
7a4c027d0f
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-28 15:04:55 -04:00
embeddedt
10672b0214
Config screen 2023-04-28 14:59:18 -04:00
embeddedt
117232687a
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-28 13:11:34 -04:00
embeddedt
3ee70d021a
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-28 13:06:19 -04:00
embeddedt
066471df33
Port Paper's chunk turbocharger from 1.17/1.18
With these changes 1.18 worlds can load on 400MB as well
2023-04-28 13:05:42 -04:00
embeddedt
f85d19340b
Fix closing font textures that were cached
Fixes #64
2023-04-28 10:52:11 -04:00
embeddedt
0a2d904ce5
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-28 10:16:48 -04:00
embeddedt
006c487b86
Optimize SortedArraySet.removeIf 2023-04-28 09:53:43 -04:00
embeddedt
a0ceaa4dac
Fix patches being nonfunctional 2023-04-27 21:36:32 -04:00
embeddedt
da6e9dc075
Port two chunk system patches from Paper 2023-04-27 20:48:53 -04:00
embeddedt
4a3a555326
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-27 15:29:39 -04:00
embeddedt
e6b7edc180
Fix compile issue on 1.19.2 2023-04-27 15:29:27 -04:00
embeddedt
9284aa39d5
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-27 15:27:17 -04:00
embeddedt
b8450b6acd
Clear SecureJar structs 2023-04-27 15:24:23 -04:00
embeddedt
c5c939df63
Clear manifest digests 2023-04-27 15:00:19 -04:00
embeddedt
0d74ad8cbf
Fix compile error 2023-04-27 14:26:09 -04:00
embeddedt
8b84b97cf0
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-27 14:22:31 -04:00
embeddedt
e77097de2d
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-27 14:22:20 -04:00
embeddedt
3b229c9933
Remove debug log message 2023-04-27 14:21:13 -04:00
embeddedt
d350c18999
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-27 14:20:23 -04:00
embeddedt
07969f2395
Instantiate entity renderers as needed to save memory 2023-04-27 14:19:58 -04:00
embeddedt
dc236d6ec1
Fix NamespacedWrapper needing remap 2023-04-27 13:58:39 -04:00
embeddedt
90585fbb4f
Fix exception in model removal notification 2023-04-27 13:38:20 -04:00
embeddedt
6c7cd80bb3
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-27 13:37:50 -04:00
embeddedt
ba830aee5a
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-27 12:15:58 -04:00
embeddedt
86d15fe239
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-27 12:08:20 -04:00
embeddedt
c861c99c79
Speed up FontManager loading 2023-04-27 12:03:38 -04:00
embeddedt
57b7c4785a
Use correct access level for overwrites 2023-04-26 20:59:49 -04:00
embeddedt
4a7bcbfd38
Remove reference to IForgeRegistryEntry 2023-04-26 20:58:19 -04:00
embeddedt
4f30edd960
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-26 20:56:15 -04:00
embeddedt
d3bf2271fc
Avoid recreating tag ID strings 2023-04-26 20:56:03 -04:00
embeddedt
ba3d418260
Speed up processing of dummy registry entries 2023-04-26 20:37:37 -04:00
embeddedt
0ae2225d9e
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-26 19:48:31 -04:00
embeddedt
7ff400ba1b
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-26 19:41:16 -04:00
embeddedt
55e7831c57
Mark AE2 and Patchouli as compile only 2023-04-26 19:41:05 -04:00
embeddedt
21826f2091
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-26 19:41:03 -04:00
embeddedt
934da3660f
Fix debug mixin being checked in 2023-04-26 19:16:07 -04:00
embeddedt
91d1cb3962
Bypass slow PngInfo class during texture loading
Thanks to @Asek3 for pointing out this bottleneck
2023-04-26 19:11:39 -04:00
embeddedt
1fc1e132cb
Fix injector target 2023-04-26 14:22:06 -04:00
embeddedt
a4515e8eae
Fix injector target 2023-04-26 14:15:35 -04:00
embeddedt
821a15ecaa
Turn off Forge resource cache 2023-04-26 14:15:24 -04:00
embeddedt
9c172e2010
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-26 13:58:50 -04:00
embeddedt
1335a892b1
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-26 13:58:38 -04:00
embeddedt
a4a19be545
Avoid using replaceAll 2023-04-26 13:58:25 -04:00
embeddedt
be75468100
Fix compile error 2023-04-26 13:53:00 -04:00
embeddedt
f645d68ff2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-26 13:47:08 -04:00
embeddedt
c061b51a52
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-26 13:46:55 -04:00
embeddedt
d356e1ece4
Optimize NBT memory usage 2023-04-26 13:42:53 -04:00
embeddedt
110362b85c
Fix log message always saying 0 items were cleared 2023-04-25 21:34:31 -04:00
embeddedt
14a8be793c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-25 21:29:12 -04:00
embeddedt
aa4acfe3d7
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 21:29:03 -04:00
embeddedt
56aed7284c
More null checks 2023-04-25 21:28:31 -04:00
embeddedt
932b401aa9
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-25 21:21:58 -04:00
embeddedt
e86664ddd2
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 21:21:41 -04:00
embeddedt
c684cccf74
Simplify book deduplication 2023-04-25 21:20:30 -04:00
embeddedt
fb7664ea3c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-25 21:19:12 -04:00
embeddedt
e7b57c161d
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 21:15:31 -04:00
embeddedt
d86344f309
Add logic to clear air items of NBT from Patchouli book registry 2023-04-25 21:05:02 -04:00
embeddedt
c0d27ee01d
Update KubeJS mixin for 1.19.2 2023-04-25 19:37:48 -04:00
embeddedt
61050ec861
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-25 19:32:48 -04:00
embeddedt
d344385aa3
Fix compile error 2023-04-25 19:32:27 -04:00
embeddedt
fc5b63282f
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 19:30:55 -04:00
embeddedt
e843f8ed6d
Clear KubeJS recipe event lists since mods can hold onto the event object 2023-04-25 19:29:26 -04:00
embeddedt
6191382a39
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-25 14:42:12 -04:00
embeddedt
644d7aaa6d
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 14:41:48 -04:00
embeddedt
7c793c7fb6
Push before release 2023-04-25 14:41:33 -04:00
embeddedt
9e7f5b50aa
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 14:40:51 -04:00
embeddedt
50c6207f8c
Remove semver plugin 2023-04-25 14:40:26 -04:00
embeddedt
2012b60832
Update release script 2023-04-25 14:40:14 -04:00
embeddedt
0cfb275480
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 14:37:49 -04:00
embeddedt
a976cc90fa
Add release script 2023-04-25 14:36:52 -04:00
embeddedt
adcfed94b7
Add semver plugin 2023-04-25 14:33:57 -04:00
embeddedt
9c9e8269b6
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-25 12:11:37 -04:00
embeddedt
a60f9ffc61
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 12:07:59 -04:00
embeddedt
e46910f3c1
Add Opticrash detection 2023-04-25 12:03:19 -04:00
embeddedt
a7f0c08a94
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-25 11:51:40 -04:00
embeddedt
a30777086d
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-25 11:44:24 -04:00
embeddedt
e771af2330
AE2 model wrapping support 2023-04-25 11:33:26 -04:00
embeddedt
a3e7435c61
Correctly emulate nullishness of baked top level model map 2023-04-25 11:10:20 -04:00
embeddedt
16269ee144
Tweak dynamic resources injection point to prevent Connectedness crash 2023-04-25 09:51:04 -04:00
embeddedt
fdd1174d8b
Mark 1.19.2 as release 2023-04-24 20:02:20 -04:00
embeddedt
879fe24b62
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-24 20:00:44 -04:00
embeddedt
1515a34ac1
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-24 20:00:21 -04:00
embeddedt
35c0c760f0
Exclude merge commits from changelog 2023-04-24 19:59:02 -04:00
embeddedt
798a50bc0c
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-24 19:56:26 -04:00
embeddedt
3922e54b11
Tweak changelog gen logic 2023-04-24 19:54:40 -04:00
embeddedt
f0323d409a
Add Modrinth uploading logic 2023-04-24 19:34:27 -04:00
embeddedt
347a61abb6
Add changelog generation 2023-04-24 19:23:17 -04:00
embeddedt
ec31b0361e
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-24 16:59:12 -04:00
embeddedt
48bec22982
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-24 16:58:13 -04:00
embeddedt
863fbaf3a4
Remove a lot of now dead code 2023-04-24 16:56:27 -04:00
embeddedt
42398fcd17
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-24 13:55:44 -04:00
embeddedt
877db870d2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-24 13:49:09 -04:00
embeddedt
da33aa7ef9
Clear vanilla memory reserve 2023-04-24 13:46:07 -04:00
embeddedt
92d9f47b83
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-24 11:52:05 -04:00
embeddedt
4c36f04f56
Fix the Minecraft window teleporting back to the center of the screen
when early load finishes
2023-04-24 11:49:56 -04:00
embeddedt
a218d84931
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-24 11:29:31 -04:00
embeddedt
b0c4719cb6
Stricter mixin target 2023-04-24 11:15:22 -04:00
embeddedt
1248a8edf6
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-24 11:12:45 -04:00
embeddedt
8cdee4826e
Disable boost worker count when Smooth Boot is installed 2023-04-24 10:50:01 -04:00
embeddedt
fdbf8d621e
Fix additional use of backgroundExecutor in dynamic resources 2023-04-24 10:49:32 -04:00
embeddedt
ee8eb02e6d
Replace mod work manager queue during vanilla bootstrap
instead of in mixin plugin
2023-04-24 10:46:17 -04:00
embeddedt
86629e7773
Move resource reloading to dedicated executor
Allows benefiting from Smooth Boot in-game (as intended)
while not slowing down launch
2023-04-24 10:35:22 -04:00
embeddedt
7eaa286a7a
Fix search trees, downgrade Forge so REI works in dev 2023-04-23 21:36:47 -04:00
embeddedt
d534dacf18
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-22 13:15:28 -04:00
embeddedt
7c2fd66929
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-22 13:15:12 -04:00
embeddedt
5f601b53b2
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-22 13:14:46 -04:00
embeddedt
66d1faa7e3
Fix another logic race that could cause missing models 2023-04-22 12:27:31 -04:00
embeddedt
23ee5cf982
Merge remote-tracking branch 'origin/1.19.2' into 1.19.4 2023-04-22 11:49:43 -04:00
embeddedt
f3fd986512
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-21 13:41:54 -04:00
embeddedt
8c5548801f
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-21 13:40:48 -04:00
embeddedt
5958e10eff
Fix behavior for contained paths with non-vanilla PackTypes 2023-04-21 13:40:21 -04:00
embeddedt
91d7e0f1f9
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-21 13:39:03 -04:00
embeddedt
9e95be14f3
Ignore non-vanilla PackTypes when caching resources 2023-04-21 13:35:12 -04:00
embeddedt
d63b5acd6e
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-20 21:13:36 -04:00
embeddedt
b155d8825f
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-20 21:02:17 -04:00
embeddedt
36664cb23a
Don't waste time parsing UVs when performing initial model load 2023-04-20 20:45:21 -04:00
embeddedt
33d3f0e537
Use SRG names 2023-04-20 20:19:52 -04:00
embeddedt
45225a580f
Clear chunk map from integrated server worlds after server stops 2023-04-20 20:17:55 -04:00
embeddedt
a0f0600184
Make sure GC can actually happen 2023-04-20 20:02:32 -04:00
embeddedt
21dcf9d3df
Make watchdog thread not hold on to server for 60 seconds 2023-04-20 19:59:58 -04:00
embeddedt
d10ff8a24e
Ensure cached resources are cleared when connecting to multiplayer 2023-04-20 19:55:41 -04:00
embeddedt
701def339f
Fix crash when null type references are interned 2023-04-20 19:20:15 -04:00
embeddedt
a2d0984078 Add ItemColors mixin as well
Related: #59
2023-04-19 16:09:40 -04:00
embeddedt
856c3cbc11
Deduplicate some ModFileScanData 2023-04-19 09:56:35 -04:00
embeddedt
f27d94cf26
Disable class info clearing by default and only clear non-mixin entries 2023-04-18 22:24:48 -04:00
embeddedt
74c3f0ff90
Also clear ClassInfo cache after server starts 2023-04-18 22:17:32 -04:00
embeddedt
e5028535e9
Clear mixin ClassInfo cache when load finishes 2023-04-18 22:16:14 -04:00
embeddedt
201c2f3b51
Add off-by-default option to disable the DFU maps for flattening 2023-04-18 22:02:06 -04:00
embeddedt
44dc150f66
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-17 20:27:06 -04:00
embeddedt
75ddef9b02
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-17 20:22:25 -04:00
embeddedt
7df692da1a Backport Starlight patch to lazily init emptiness maps 2023-04-17 18:23:30 -04:00
embeddedt
7a17c74762
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-16 21:13:23 -04:00
embeddedt
6ad1321048
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 21:09:42 -04:00
embeddedt
274c41d637
Allow unloading unused structures 2023-04-16 20:54:41 -04:00
embeddedt
ad7bc8829b
Add eviction to some DFU caches 2023-04-16 20:27:42 -04:00
embeddedt
c090476925
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-16 14:45:04 -04:00
embeddedt
3a15e5c6bc
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 14:39:23 -04:00
embeddedt
1602d3352f
Fix crash with some more types of empty paths 2023-04-16 14:38:11 -04:00
embeddedt
0af09b7e27
1.19 does not allow changing RenderTypes at runtime 2023-04-16 14:37:51 -04:00
embeddedt
e6716613cc
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-16 14:15:10 -04:00
embeddedt
362bf03e5d
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 13:31:20 -04:00
embeddedt
c8523b3844
Incrementing the index is important 2023-04-16 13:31:01 -04:00
embeddedt
dcd37391fe
Fix incorrect merge 2023-04-16 13:24:34 -04:00
embeddedt
44d178bb89
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 13:21:40 -04:00
embeddedt
3497adfa6d
Bugfixes 2023-04-16 13:21:10 -04:00
embeddedt
4c8c6ead28
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 13:16:06 -04:00
embeddedt
f8c5c50ce4
Improve speed of cache building 2023-04-16 13:15:13 -04:00
embeddedt
0f3c701d2a
Prevent missing options from crashing the game 2023-04-16 12:55:52 -04:00
embeddedt
6f176ba86d
Remove reference to nonexistent config option 2023-04-16 12:55:01 -04:00
embeddedt
0e5b952ea6
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 12:53:13 -04:00
embeddedt
ea86bc6850
More aggressive interning of cached path components 2023-04-16 12:48:16 -04:00
embeddedt
4a626043b8
Fix import 2023-04-16 12:02:50 -04:00
embeddedt
6356cba581
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 12:02:20 -04:00
embeddedt
3922c3ec26
Reduce memory usage of dynamic CTMPackReloadListener 2023-04-16 11:55:00 -04:00
embeddedt
f36a8f4266
Clear ObjectHolder Throwable fields after registry events fire 2023-04-16 11:39:54 -04:00
embeddedt
26c690595e
Improve memory usage of 1.18 resource pack cache 2023-04-16 09:38:11 -04:00
embeddedt
4d9852234a
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-16 09:36:02 -04:00
embeddedt
61af88a2ab
Improve memory usage of resource pack cache 2023-04-16 09:35:31 -04:00
embeddedt
e9b52cdd55
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-15 21:27:09 -04:00
embeddedt
9225962983
Invalidate material cache if the texture map changes on a model 2023-04-15 21:26:49 -04:00
embeddedt
99ffd3dc95
Fix running outside dev 2023-04-15 15:51:44 -04:00
embeddedt
8dbcac7afc
Speed up world creation screen 2023-04-15 15:08:05 -04:00
embeddedt
f8f0e0ca45
Port dynamic model loading to 1.19.4 2023-04-15 14:56:14 -04:00
embeddedt
c891501579
1.19.4 2023-04-15 14:22:36 -04:00
embeddedt
244873f2fd
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-15 12:14:15 -04:00
embeddedt
33687254cd
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-15 12:13:44 -04:00
embeddedt
58d066d0db
Use high-priority mixin with injects instead of overwrites for
dynamic resources
2023-04-15 12:00:03 -04:00
embeddedt
2db0b24002
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-13 13:28:05 -04:00
embeddedt
76c95abf09
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-13 13:27:57 -04:00
embeddedt
61710dbc85
Add missing import
Don't edit things from the command line ;)
2023-04-13 13:27:47 -04:00
embeddedt
05dde993fd
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-13 13:27:12 -04:00
embeddedt
f6cfde2b56
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-13 13:27:03 -04:00
embeddedt
c7fd6c1393
Fix AT map not actually initializing types set 2023-04-13 13:26:45 -04:00
embeddedt
af555a2089
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-13 13:21:40 -04:00
embeddedt
4c6e18f5b8
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-13 13:19:33 -04:00
embeddedt
c4fbde015e
Use reflection instead of mixins for SyncExecutor patch 2023-04-13 13:00:43 -04:00
embeddedt
9443c41273
Optimize access transformers 2023-04-13 12:01:41 -04:00
embeddedt
e977fcdfce
Improved chunk deadlock detection system + patch Valhelsia Structures
when installed
2023-04-12 19:06:40 -04:00
embeddedt
10149e9f87
Add integrated server watchdog 2023-04-12 16:05:08 -04:00
embeddedt
3b56f00b82
Fix world load freezing if mods access the previous server world 2023-04-12 14:42:11 -04:00
embeddedt
491c62e8a7
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-11 21:32:40 -04:00
embeddedt
d0d3ea080d
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-11 21:32:26 -04:00
embeddedt
d709335ac2
Fetch a model the vanilla way if it fails to be present in
the lookup cache when gathering textures
2023-04-11 21:31:55 -04:00
embeddedt
8142eb8235
Port PathPackResources patch from 1.18
Forge's resource caching is not reliable
2023-04-11 11:47:09 -04:00
embeddedt
47959cddef
Port patch to 1.19 2023-04-11 11:19:23 -04:00
embeddedt
357b9af52f
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-11 11:16:22 -04:00
embeddedt
4f17319836
Fix compile error 2023-04-11 11:16:07 -04:00
embeddedt
1889889f01
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-11 11:13:36 -04:00
embeddedt
87f74bc1b9
Skip calling stateToModelLocation 2023-04-11 11:12:13 -04:00
embeddedt
bfa9d5b12e
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-11 10:19:15 -04:00
embeddedt
e1a73fa4ab
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-11 10:17:18 -04:00
embeddedt
f1d23f9a92
Avoid loading every permutation of a multipart model at once
Fixes the 5 second lag spike for mods like Pedestals on 1.19+
2023-04-11 10:11:10 -04:00
embeddedt
5f8f03137c
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-10 21:59:42 -04:00
embeddedt
2a327ef4c9
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-10 21:50:58 -04:00
embeddedt
a4e6522c52 Rewrite model material gathering to use blockstate files 2023-04-10 19:25:01 -04:00
embeddedt
5f08542009 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-10 16:03:23 -04:00
embeddedt
1163591f8f Merge remote-tracking branch 'origin/main' into 1.18 2023-04-10 15:59:20 -04:00
embeddedt
6374d90d4a Properly hold onto unbaked models as they are loaded 2023-04-10 15:58:12 -04:00
embeddedt
5ccdb4c165 Don't count render ticks until recipes and tags are sent 2023-04-10 11:49:12 -04:00
embeddedt
6dd27c8799 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-10 10:48:06 -04:00
embeddedt
7b84d92c4a Merge remote-tracking branch 'origin/main' into 1.18 2023-04-10 10:47:02 -04:00
embeddedt
2889a4e39b Move DynamicModelBakeEvent off modloading bus
The modloading bus insists on logging every event that is fired
which is very laggy
2023-04-10 10:43:24 -04:00
embeddedt
fd53fe1cc3 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-10 10:31:23 -04:00
embeddedt
9c284e6b8e Update core lib 2023-04-10 10:31:16 -04:00
embeddedt
f1f724f6e3 Merge remote-tracking branch 'origin/main' into 1.18 2023-04-10 10:31:05 -04:00
embeddedt
c00b984dae Say that models are always present 2023-04-10 10:30:44 -04:00
embeddedt
75a977fc39 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-10 10:08:50 -04:00
embeddedt
059779a29a Update core lib version 2023-04-10 10:08:23 -04:00
embeddedt
49a0b56b74 Merge remote-tracking branch 'origin/main' into 1.18 2023-04-10 10:02:48 -04:00
embeddedt
af85a4293a Add compat for SuperMartijn642CoreLib 2023-04-10 10:02:15 -04:00
embeddedt
e38babe3c2
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-10 08:02:04 -04:00
embeddedt
c010d700a8
Make entity ID syncer not crash if a class can't be loaded
Related: #55
2023-04-10 08:00:50 -04:00
embeddedt
5cca594f7d
Fix incorrect shadow method 2023-04-09 22:00:30 -04:00
embeddedt
0aeab7ef69
Fix compile errors 2023-04-09 21:00:34 -04:00
embeddedt
a8e92871c2
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-04-09 20:22:29 -04:00
embeddedt
6f3cef7e1d
Fix compile errors 2023-04-09 20:04:51 -04:00
embeddedt
21dfec3b93
Merge remote-tracking branch 'origin/main' into 1.18 2023-04-09 19:35:39 -04:00
embeddedt
882f4832df
Allow concurrent retrieval of models from the cache 2023-04-09 14:03:32 -04:00
embeddedt
e5cd9f57b5
CTM support 2023-04-09 13:52:40 -04:00
embeddedt
8937ca020d
Add ModelBakeEvent alternative for dynamic models 2023-04-09 12:48:00 -04:00
embeddedt
a6d924535e
Fix KubeJS resources not being scanned for textures 2023-04-09 12:29:47 -04:00
embeddedt
a2af0cf835
Add blockstate compression optimization (off by default for mod compat) 2023-04-08 22:15:32 -04:00
embeddedt
9ab6bc83b8
Fix debug overlay leaking chunks from the last world 2023-04-08 21:12:21 -04:00
embeddedt
d2e2040ce4
Reduce allocation rate from biome zoomer 2023-04-08 20:28:48 -04:00
embeddedt
af731b336e
Clear memory reserve 2023-04-08 20:24:34 -04:00
embeddedt
1796d80d40
Make ModelLocationCache more low-memory friendly 2023-04-08 20:01:40 -04:00
embeddedt
775bc5f027
Use ImmutableMap for resource finder 2023-04-08 19:13:21 -04:00
embeddedt
b20705a4c4
Use ImmutableMap for model location cache since it never changes 2023-04-08 19:12:08 -04:00
embeddedt
395e14ba9b
Fix leaking mixin injectors 2023-04-08 19:08:03 -04:00
embeddedt
e4d3ffbac1
Don't keep Interner instance around after collecting resources 2023-04-08 18:40:50 -04:00
embeddedt
e724c4dfb1
Strengthen exception when parsing models 2023-04-08 17:28:17 -04:00
embeddedt
4f35a6cda3
Make material gatherer resilient to JSON errors 2023-04-08 17:08:35 -04:00
embeddedt
26d76de7ef
Dynamic model loading 2023-04-08 17:01:16 -04:00
embeddedt
3a8bc41dd4
Fix mixin warnings 2023-04-07 19:03:00 -04:00
embeddedt
1814d96d6c
Update Loom 2023-04-07 19:00:48 -04:00
embeddedt
4dd6b7641e
Fix https://github.com/refinedmods/refinedstorage/issues/2636
Mixin version of https://github.com/refinedmods/refinedstorage/pull/3435
2023-04-07 18:54:54 -04:00
embeddedt
b988715c2c
Fix JEI search tree replacement on 1.19 2023-04-01 20:13:31 -04:00
embeddedt
ba82be7a89
Log on search tree replacement 2023-04-01 20:13:31 -04:00
embeddedt
d5d06a3452
Normalize resource paths on 1.18 as well
Seems the fix from 1.16 was accidentally not ported
2023-04-01 12:05:28 -04:00
embeddedt
3906bf9725 Don't print error message if structure file is not found
This matches vanilla behavior
2023-03-27 09:36:09 -04:00
embeddedt
304fd05955
Clean up log messages 2023-03-26 19:30:10 -04:00
embeddedt
bb9201c58c
Add some mixins to speed up dev time 2023-03-26 18:20:57 -04:00
embeddedt
b3449a2d63
Disable resource finder log 2023-03-26 18:20:47 -04:00
embeddedt
f8d17ba3ab
Disable datapack reload elision if TaC is installed
Related: #46
2023-03-26 15:25:17 -04:00
embeddedt
c37d91e476
Avoid fetching key state on background threads 2023-03-26 09:17:03 -04:00
embeddedt
5e81a49dc8 Don't use cached server resources if they got closed somehow
Related: #46
2023-03-24 10:50:47 -04:00
embeddedt
da74b29f21 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-21 09:51:38 -04:00
embeddedt
b2a8b7dc97 Merge remote-tracking branch 'origin/main' into 1.18 2023-03-21 09:45:53 -04:00
embeddedt
b623b3fa96 Fix Lightspeed incompatibility
Fixes #43
2023-03-21 09:20:35 -04:00
embeddedt
a4e16704a3 Synchronize on public class to prevent obscure crashes in some cases 2023-03-21 09:16:57 -04:00
embeddedt
3728927586 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-20 09:28:54 -04:00
embeddedt
1c9d8728f2 Merge remote-tracking branch 'origin/main' into 1.18 2023-03-20 09:28:02 -04:00
embeddedt
55201311c7
Load vanilla resources if revert is required 2023-03-19 17:49:31 -04:00
embeddedt
bc1c70bd0c
Remove (usually) redundant datapack reload on world creation screen
The second, Forge-added reload is enough in all cases except when
mods supply invalid datapacks.

In this edge case, we will need to reload server resources when the
user requests to revert to vanilla
2023-03-19 17:49:31 -04:00
embeddedt
0f48165b15
Remove extra log message 2023-03-19 17:48:58 -04:00
embeddedt
5167f81f1f
Cache JEResources villagers 2023-03-19 17:48:58 -04:00
embeddedt
00d0885245
Build blockstate cache on-demand instead of using a background thread
Should also hide incompatibility with buggy block impls. like Dynamic Trees
2023-03-19 17:48:58 -04:00
embeddedt
214015dfe9 Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-15 15:00:50 -04:00
embeddedt
36a7b93d80 Fix ImmPortals crash 2023-03-15 15:00:14 -04:00
embeddedt
fb6167ec6d
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-13 14:40:26 -04:00
embeddedt
8d9ae53e0e Merge remote-tracking branch 'origin/main' into 1.18 2023-03-13 14:40:03 -04:00
embeddedt
38a4776626 Fix rare structure manager crash 2023-03-13 14:39:43 -04:00
embeddedt
d057ab061b
1.19 is still beta 2023-03-11 21:14:51 -05:00
embeddedt
f30b1b70f6
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-11 20:49:13 -05:00
embeddedt
8457cc5eff
Avoid crashing if REI creative search fails 2023-03-11 20:48:59 -05:00
embeddedt
c9a48eb832
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-11 20:17:44 -05:00
embeddedt
a9605a6888
Make REI search tree higher priority than JEI one
Fixes issues with REI compat plugin
2023-03-11 20:12:01 -05:00
embeddedt
3380c3c70e
Bump 1.18 to release status 2023-03-11 12:13:28 -05:00
embeddedt
42fe91ad91
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-11 11:51:31 -05:00
embeddedt
4d8537ee4f
Tweak event used to detect main menu appearing, should fix game load not being measured 2023-03-11 11:50:32 -05:00
embeddedt
cf9fa6e055
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-11 11:29:52 -05:00
embeddedt
9eabaac35a
Add system to retry larger atlas sizes 2023-03-11 11:29:30 -05:00
embeddedt
3ba5b4296a
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-11 11:13:27 -05:00
embeddedt
1b5df63eae
Add debug log when stitcher fails 2023-03-11 11:13:07 -05:00
embeddedt
68824eaa1b
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-11 09:44:45 -05:00
embeddedt
94bc711008
Rewrite atlas size calculation logic and re-enable fast texture stitching 2023-03-11 09:38:13 -05:00
embeddedt
14e266288a
Cache BlockModelShaper.statePropertiesToString 2023-03-11 09:38:06 -05:00
embeddedt
c481ae0f26
Make some mods compileOnly 2023-03-10 20:14:29 -05:00
embeddedt
6a7ca1e518
Remove unnecessary Files.exists call in ModFileResourcePack.getResource() 2023-03-10 20:14:11 -05:00
embeddedt
eed3a80fc1 Add support for using REI for creative search 2023-03-09 10:15:29 -05:00
embeddedt
63fa31bde1
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-07 22:26:16 -05:00
embeddedt
519e9d40f8 Turn off two features when incompatible mods are present
Fixes BetterEnd crash
Fixes #35
2023-03-07 09:38:54 -05:00
embeddedt
50b11b0e1f Turn off faster texture stitching by default, has random bugs 2023-03-06 13:06:55 -05:00
embeddedt
cb23ee5a54 Add debug tool for weird crashes, off by default 2023-03-06 13:06:15 -05:00
embeddedt
7a2b57221e Return to baking models on the main thread
Mods... as usual.
2023-03-06 09:12:04 -05:00
embeddedt
61c2b943cf
Fix world load time not being set 2023-03-05 13:32:59 -05:00
embeddedt
2e3f43674f
Fix model bakery not being initialized 2023-03-05 13:32:51 -05:00
embeddedt
5df695cbbb
Add YUNG's Better Strongholds compat 2023-03-04 22:14:35 -05:00
embeddedt
9eb3ed4273
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-04 19:24:21 -05:00
embeddedt
7b192433b7
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-04 19:22:25 -05:00
embeddedt
1c2a2c65ad
Fix some bugs 2023-03-04 19:21:49 -05:00
embeddedt
ac261a0bfd
Fix incorrectly mapped mixin 2023-03-04 17:10:56 -05:00
embeddedt
4a15e277aa
Add UID to JEI plugin 2023-03-04 16:41:52 -05:00
embeddedt
a2cbc49bb1
Hide DFU warning if Forge's DFU blocker is on 2023-03-04 16:33:02 -05:00
embeddedt
5d317b6d94
Merge remote-tracking branch 'origin/1.18' into 1.19.2 2023-03-04 16:29:04 -05:00
embeddedt
95d4430064
Mark 1.18 versions as beta 2023-03-04 15:34:14 -05:00
embeddedt
01025d5b4d
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-04 15:05:42 -05:00
embeddedt
6d7a450ec8
Modify branding control mixin priority 2023-03-04 15:05:24 -05:00
embeddedt
8303d85b6c
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-04 13:23:53 -05:00
embeddedt
1c9935e298
Use MethodHandles to select LWJGL 3.3 methods if needed 2023-03-04 10:36:11 -05:00
embeddedt
a54e7b831a
Improve compatibility of ID desync fix, and add Roadrunner support 2023-03-04 09:10:12 -05:00
embeddedt
84ba47f174
Fix compatibility with Performant 2023-03-03 21:43:32 -05:00
embeddedt
5e296f5d3a
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-03 21:20:17 -05:00
embeddedt
010de8c30f
Mark branding mixin as not required 2023-03-03 21:20:02 -05:00
embeddedt
5560ef47c0
Make JEResources compileOnly on 1.18 since it behaves weirdly in dev 2023-03-03 21:18:22 -05:00
embeddedt
dbdd0a77a1
Merge remote-tracking branch 'origin/main' into 1.18 2023-03-03 21:12:53 -05:00
embeddedt
0cf089febe Skip entity ID sync in singleplayer 2023-03-02 16:11:15 -05:00
embeddedt
e8311d0b95 Fix Twilight Forest CME during game startup 2023-03-02 16:04:03 -05:00
embeddedt
ce1462efd1 Add system to detect and correct SynchedEntityData ID mismatches
Should fix weird stacktraces being thrown when mods like Citadel
and Caves and Cliffs Backport are installed together
2023-03-02 15:53:00 -05:00
embeddedt
db95e37d22
Fix MC-218112 2023-03-01 20:03:47 -05:00
embeddedt
cc79bf7274 Allow JEPB and JEResources to use integrated server resources 2023-03-01 15:47:53 -05:00
embeddedt
b9050368bc Reduce verbosity of some log messages 2023-03-01 15:47:53 -05:00
狂想ThePotato
7342bb4fb4
Update zh_cn.json (#26) 2023-02-28 09:49:18 -05:00
embeddedt
6e58570ea7 Remove CTM from dev environment, not needed anymore 2023-02-27 21:02:18 -05:00
embeddedt
9902b97b1d Warn if LazyDFU is not installed 2023-02-27 20:58:46 -05:00
embeddedt
fca7c9f7ef Skip reloading server resources if switching worlds and the datapack
order didn't change
2023-02-27 12:17:54 -05:00
embeddedt
c27f189154 Turn off faster singleplayer load by default for now 2023-02-27 09:32:33 -05:00
embeddedt
d9b2a880bb Handle mods that request paths with double slashes 2023-02-27 09:31:16 -05:00
embeddedt
c269cbedac
Patch VanillaPackResources.getResource since it's still an issue 2023-02-26 20:13:28 -05:00
embeddedt
f36074376b
Reaches main menu on 1.19.2 2023-02-26 19:50:42 -05:00
embeddedt
a38e46a970
Check JEI version dynamically 2023-02-26 13:33:53 -05:00
embeddedt
bad48db4d5
Merge remote-tracking branch 'origin/main' into 1.18 2023-02-25 20:58:40 -05:00
embeddedt
11c04fb668
Replace existing DataVersion in structure with new version 2023-02-25 20:58:25 -05:00
embeddedt
9c7ef72b8f
Merge remote-tracking branch 'origin/main' into 1.18 2023-02-25 20:43:19 -05:00
embeddedt
c883b0953e
Include hash in warning message 2023-02-25 20:43:09 -05:00
embeddedt
431f6930ce
Merge remote-tracking branch 'origin/main' into 1.18 2023-02-25 20:38:42 -05:00
embeddedt
4024bf03ad
Warn if structure runs through DFU 2023-02-25 20:38:29 -05:00
embeddedt
007a7fb077
Merge remote-tracking branch 'origin/main' into 1.18 2023-02-25 20:29:54 -05:00
embeddedt
5c853a7259
Cache upgraded structures instead of running them through DFU every time
Fixes https://github.com/TelepathicGrunt/RepurposedStructures/issues/264
and similar issues
2023-02-25 20:28:58 -05:00
embeddedt
374f0a0841
Relax JEI version requirement 2023-02-25 19:39:27 -05:00
embeddedt
6aed33a5d7
Port stronghold caching to 1.18 2023-02-25 19:27:57 -05:00
embeddedt
963394c558
Merge remote-tracking branch 'origin/main' into 1.18 2023-02-25 18:52:20 -05:00
embeddedt
314a1e27cc
Cache stronghold locations instead of recomputing them on every world load 2023-02-25 18:51:27 -05:00
embeddedt
341631a8e1
Fix crash in creative search 2023-02-24 20:56:36 -05:00
embeddedt
11de406065
Merge remote-tracking branch 'origin/main' into 1.18 2023-02-24 19:42:07 -05:00
embeddedt
654c98b969
Fix a number of injections being misplaced on 1.18 2023-02-24 19:38:19 -05:00
embeddedt
6f5f21267e
Disable source JAR generation 2023-02-24 18:14:28 -05:00
embeddedt
b6497cee4e
Show branding on F3 2023-02-24 18:14:21 -05:00
embeddedt
8702ff2971
Add branding and revamp version control 2023-02-24 17:53:08 -05:00
embeddedt
7f018c1ff7
Minor optimization to ForgeRegistry.validateContent 2023-02-24 13:17:44 -05:00
embeddedt
4af85f4076
Speed up VanillaPackResources.getResource 2023-02-24 12:42:35 -05:00
embeddedt
a22d36b485
Fix resource pack optimization so it actually works 2023-02-22 21:43:10 -05:00
embeddedt
da1017e61e
Remove JEI dependency 2023-02-22 20:14:27 -05:00
embeddedt
5cd3b40add
Add 1.18 version of resource pack optimization 2023-02-22 20:12:06 -05:00
embeddedt
17e526bcfe
Merge branch 'main' into 1.18 2023-02-22 19:38:48 -05:00
embeddedt
7868bd90ee
Fix exception thrown in dev 2023-02-22 15:39:16 -05:00
embeddedt
084b30e089
Latch JEI and blockstate threads until the world finishes loading
These processes are not necessary to get into the game, and so
we want to devote all CPU time to essential tasks like logging in
and loading chunks.
2023-02-22 13:07:38 -05:00
embeddedt
3baace55a8
Avoid lazily baking multiparts and multivariants
Some mods use instanceof checks and so the correct class needs to
be present.

Fixes #24
2023-02-22 12:34:47 -05:00
embeddedt
c258bba5ec
Minor code cleanup 2023-02-22 11:44:56 -05:00
embeddedt
145213afa8
Minor bugfixes to faster singleplayer load 2023-02-21 22:51:38 -05:00
embeddedt
2b7d79f4a7
Ensure configurability of faster singleplayer load works 2023-02-21 22:35:45 -05:00
embeddedt
a4ce490963
Fix main thread not actually blocking until JEI thread finishes 2023-02-21 22:35:29 -05:00
embeddedt
bc5b85efcc
Move 441 chunk loading to after join game packets are sent on integrated server 2023-02-21 22:24:50 -05:00
embeddedt
cb6399e820
Port faster texture stitching by SuperCoder79 2023-02-21 11:26:46 -05:00
embeddedt
749c4e1d9d
Add CTM to dev env 2023-02-21 09:38:17 -05:00
embeddedt
b57799cedd
1.7.0 - KubeJS optimizations + minor bugfixes 2023-02-20 12:12:08 -05:00
embeddedt
d7d1ba0993
Make client-only injection not required
Fixes #23
2023-02-20 12:11:46 -05:00
embeddedt
aa963f4d1a
Allow COW in StaticTagHelper
Seems that some mods bind tags at runtime. This is a hack but it
should fix the persistent CME I get when launching ATM6
2023-02-20 11:46:36 -05:00
embeddedt
c7f2d41695
More KubeJS optimizations 2023-02-20 11:25:39 -05:00
embeddedt
02230095b7
Ignore exceptions while building blockstate cache 2023-02-20 11:25:22 -05:00
embeddedt
5cd80ebd27
Use a custom ForkJoinPool so that mod classes load correctly 2023-02-20 10:23:46 -05:00
embeddedt
df7cd20e59
Clean up imports 2023-02-20 09:57:34 -05:00
embeddedt
a6e736e8af
Remove redundant optimization 2023-02-20 09:57:15 -05:00
embeddedt
5b852f9531
Remove debug logging 2023-02-19 22:44:35 -05:00
embeddedt
613364ce91
Further KubeJS optimization 2023-02-19 22:40:59 -05:00
embeddedt
4d397361e2
Remove special sauce in blockstate handling
Now that the cache is rebuilt off-thread, there is little to gain
from parallelizing these few blocks
2023-02-19 22:19:55 -05:00
embeddedt
9b9b13d24b
Add KubeJS optimizations 2023-02-19 22:19:20 -05:00
embeddedt
36217fe479
1.6.1 2023-02-19 20:13:14 -05:00
embeddedt
1f1bf4a442
Guard against mods that don't support concurrency on resource packs
Should fix #22
2023-02-19 20:12:49 -05:00
embeddedt
74a727d335
Add ability to use vanilla resource reload profiler 2023-02-19 20:05:09 -05:00
embeddedt
d2d29f14cb
Prevent Nashorn from defining anonymous classes if Java is too new
Solar Flux Reborn now works on Java 17
2023-02-19 18:44:21 -05:00
embeddedt
a99889e160
Merge branch 'main' of github.com:embeddedt/ModernFix 2023-02-19 16:53:54 -05:00
embeddedt
19018699a0
1.6.0 2023-02-19 16:27:31 -05:00
embeddedt
5194089c78
Use remapped JAR for CurseForge artifact 2023-02-19 16:27:03 -05:00
ZZZank
2e50b995d8
Improve translations (#21) 2023-02-19 14:25:46 -05:00
embeddedt
30bcf66c35
Mark structure manager field as immutable 2023-02-18 13:12:33 -05:00
embeddedt
ab19c89fa2
use Java 17 in Action 2023-02-18 12:53:25 -05:00
422 changed files with 21448 additions and 2706 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
ko_fi: embeddedt

78
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@ -0,0 +1,78 @@
name: Bug Report
description: "For reporting bugs and other defects"
body:
- type: markdown
attributes:
value: >-
**Need help?** Ask on [Discord](https://discord.gg/rN9Y7caguP) instead of opening an issue.
**Issues that do not meet the requirements below (or are otherwise impossible to address with the given info) will be closed without investigation.**
- type: checkboxes
id: confirmations
attributes:
label: Checklist
options:
- label: I am reporting a defect, not asking for help
required: true
- label: I have searched existing issues and this has not been reported
required: true
- label: I have reduced my mod list to the minimum required to reproduce this issue (see below)
required: true
- type: textarea
id: description
attributes:
label: Bug Description
description: >-
Describe the issue in detail. Be sure to include what you expected to happen and what actually happened.
validations:
required: true
- type: textarea
id: minimal-mods
attributes:
label: Minimal Mod List
description: >-
List ONLY the mods required to reproduce this issue. Maintainers have debugging tools that help them
locate problems quickly, but these generally don't work well in modpacks or large mod sets.
A minimal list should typically contain fewer than 10 mods.
Reports with large mod lists will likely be closed without investigation, unless the problem is very clear.
If you don't know which mods are causing your problem, use binary search:
1. Remove half your mods
2. Test if the issue still occurs
3. If yes, remove half again. If no, restore the last removed half and repeat from step 1.
4. Repeat until only the necessary mods remain
placeholder: "- ModernFix 5.x.x\n- SomeMod 1.2.3"
validations:
required: true
- type: textarea
id: description-reproduction-steps
attributes:
label: Reproduction Steps
description: >-
Provide clear steps to reproduce the bug. Each step should be a single concrete action.
Maintainers are busy and need to be able to quickly replicate your problem. Your reproduction steps should be
clear enough for someone who is unfamiliar with your mods to follow in 5 minutes or less (not counting time
to launch the game).
Providing vague steps is likely to result in the issue being closed.
placeholder: "1. \n2. \n3. "
validations:
required: true
- type: textarea
id: diagnostic-info
attributes:
label: Diagnostic Info
description: >-
Drag and drop `latest.log` from `.minecraft/logs/` for the session where the issue occurred.
Do not paste log text inline. Issues without a valid `latest.log` will be closed.
If a crash occurred, also attach the relevant file from `.minecraft/crash-reports/`.
validations:
required: true

6
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1,6 @@
blank_issues_enabled: true
contact_links:
- name: For help with other issues, join our Discord community
url: https://discord.gg/rN9Y7caguP
about: This is the best option for getting help with mod installation, performance issues, and any other support inquiries
# Copied from https://github.com/CaffeineMC/sodium-fabric#community

View File

@ -1,26 +1,136 @@
# This workflow will build a Java project with Gradle
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Build ModernFix using Gradle
name: Build mod
on: [push, pull_request]
on:
push:
branches:
- '**'
tags-ignore:
- '**'
pull_request:
jobs:
build:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
permissions:
issues: write
concurrency:
group: release-${{ github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v2
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-java@v3
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '8'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build the mod
run: ./gradlew --no-daemon build
- uses: actions/upload-artifact@v2
java-version: 21
check-latest: true
- name: Check if release branch
id: check_branch
if: github.event_name == 'push'
run: |
if [[ "${{ github.ref }}" =~ ^refs/heads/[0-9]+\. ]]; then
echo "is_release=true" >> $GITHUB_OUTPUT
else
echo "is_release=false" >> $GITHUB_OUTPUT
fi
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-read-only: ${{ steps.check_branch.outputs.is_release != 'true' }}
gradle-home-cache-cleanup: true
- name: Remove tags for release on other versions
if: steps.check_branch.outputs.is_release == 'true'
run: ./scripts/tagcleaner.sh
- name: Build ModernFix using Gradle
run: ./gradlew build
- name: Run mixin audit
run: timeout 60 xvfb-run ./gradlew runAuditClient
- name: Publish mod to CurseForge & Modrinth
if: steps.check_branch.outputs.is_release == 'true'
run: ./gradlew publishMods copyJarToBin
env:
CURSEFORGE_TOKEN: ${{ secrets.CURSEFORGE_TOKEN }}
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
- name: Capture mod version
if: steps.check_branch.outputs.is_release == 'true'
run: |
echo "MOD_VERSION=$(./gradlew properties -q | grep '^version:' | awk '{print $2}')" >> $GITHUB_ENV
echo "MC_VERSION=$(grep '^minecraft_version=' gradle.properties | cut -d= -f2)" >> $GITHUB_ENV
- name: Comment on fixed issues
if: steps.check_branch.outputs.is_release == 'true'
uses: actions/github-script@v7
with:
script: |
const { execSync } = require('child_process');
const branch = context.ref.replace('refs/heads/', '');
const { data: runs } = await github.rest.actions.listWorkflowRuns({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'gradle.yml',
branch,
status: 'success',
per_page: 1
});
const logArgs = runs.workflow_runs.length > 0
? `${runs.workflow_runs[0].head_sha}..${context.sha}`
: `-1 ${context.sha}`;
const log = execSync(`git log ${logArgs} --format=%s%n%b`, { encoding: 'utf8' });
const issueNumbers = new Set();
const pattern = /(?:fix(?:es|ed)?|close[sd]?|resolve[sd]?)\s+#(\d+)/gi;
let match;
while ((match = pattern.exec(log)) !== null) {
issueNumbers.add(parseInt(match[1]));
}
if (issueNumbers.size === 0) {
console.log('No fixed issues found in commits');
return;
}
const MARKER = '<!-- modernfix-fix-tracker -->';
const modVersion = process.env.MOD_VERSION;
const mcVersion = process.env.MC_VERSION;
const newLine = `- ${modVersion} for Minecraft ${mcVersion}`;
for (const issueNumber of issueNumbers) {
try {
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
per_page: 100
});
const existing = comments.find(c => c.body.includes(MARKER));
if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body: existing.body + `\n${newLine}`
});
console.log(`Updated comment on issue #${issueNumber}`);
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: `${MARKER}\nThe fix for this issue has been released in the following versions of ModernFix:\n${newLine}`
});
console.log(`Created comment on issue #${issueNumber}`);
}
} catch (e) {
console.log(`Could not comment on #${issueNumber}: ${e.message}`);
}
}
- name: Upload Artifacts to GitHub
uses: actions/upload-artifact@v4
with:
name: Package
path: build/libs
path: bin

27
.github/workflows/wiki_update.yml vendored Normal file
View File

@ -0,0 +1,27 @@
name: Update wiki using WikiGen
on:
push:
branches:
- '1.**'
jobs:
wikigen:
if: github.repository_owner == 'embeddedt'
runs-on: ubuntu-22.04
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate Markdown Patch-List
run: python3 scripts/gen-markdown-patchlist.py
- name: Very legitimate hack for wiki push race condition
run: sleep $((1 + (RANDOM % 30)))
shell: bash
- name: Upload generated file to wiki
uses: SwiftDocOrg/github-wiki-publish-action@v1
with:
path: "doc/generated"
env:
GH_PERSONAL_ACCESS_TOKEN: ${{ secrets.WIKI_TOKEN }}

9
.gitignore vendored
View File

@ -2,7 +2,15 @@ eclipse
run
libs
media
__pycache__
*.pyc
classes/
.architectury-transformer/
fabric/fabricloader.log
fabric/test_run
# Changelog
CHANGELOG.md
# Created by https://www.gitignore.io/api/gradle,intellij,eclipse,windows,osx,linux
@ -73,7 +81,6 @@ fabric.properties
### Eclipse ###
*.pydevproject
.metadata
bin/
tmp/
*.tmp
*.bak

21
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,21 @@
ModernFix is a standard Minecraft-style Gradle project powered by Architectury Loom. To build the mod for all platforms,
run the `build` task (e.g. via `./gradlew build`). You can also use `./gradlew forge:build` or `./gradlew fabric:build`
to build for just one loader (e.g. when debugging and wanting to rebuild quickly).
You must use Java 21 to develop ModernFix as the toolchain requires it. Nonetheless, the built 1.20.1 JAR is still
compatible with Java 17.
## Submitting pull requests
Code or documentation contributions are welcome. Please keep the following points in mind:
* This project supports many Minecraft versions. Ideally, contributions should be made to the oldest relevant MC version (currently 1.20)
and then they will be ported forward.
This somewhat unconventional policy ensures that all supported versions are treated equal when it comes to development,
rather than the onus being on other modders and players to backport changes that are needed. Changes to older versions are
quickly ported up to the latest one as part of the regular development cycle. You are still welcome to open PRs against
a newer branch if desired - but the change will likely be applied manually and not merged as a regular PR.
* Please ensure your code is reasonably neat and sufficiently documented. Remember that self-documenting code is always
better.

View File

@ -1,12 +1,17 @@
# ModernFix
A Forge 1.16 mod that uses mixins to make the game slightly more performant (and hopefully less buggy too).
In the words of asiekierka, questionable "performance improvements" that are not in Forge for probably very good reasons.
A performance mod for modern Minecraft that significantly improves launch times, world load times, memory usage, etc.
Some fixes are based on prior work in various Forge PRs (check commit history and/or code comments). The config system
is directly derived from Sodium and used under the terms of the LGPL-3.0 license.
## Development builds (generally stable, but may occasionally have bugs)
- 1.16.5: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.16/Package.zip
- 1.18.2: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.18/Package.zip
- 1.19.2: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.19.2/Package.zip
- 1.20.1: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.20/Package.zip
- 1.20.2: https://nightly.link/embeddedt/ModernFix/workflows/gradle/1.20.2/Package.zip
------------
![YourKit logo](https://www.yourkit.com/images/yklogo.png)

View File

@ -0,0 +1,54 @@
plugins {
id 'com.gradleup.shadow' version '8.3.9'
id 'java-library'
}
repositories {
mavenCentral()
maven { url uri("https://maven.fabricmc.net") }
maven { url "https://maven.neoforged.net/releases" }
}
dependencies {
annotationProcessor 'com.google.auto.service:auto-service:1.1.1'
compileOnly 'com.google.auto.service:auto-service:1.1.1'
implementation 'com.google.code.gson:gson:2.10.1'
shadow 'com.google.code.gson:gson:2.10.1'
implementation 'com.google.auto:auto-common:1.2.1'
shadow 'com.google.auto:auto-common:1.2.1'
implementation 'com.google.guava:guava:21.0'
shadow 'com.google.guava:guava:21.0'
implementation project(":annotations")
shadow project(":annotations")
// Shadow annotations
implementation 'net.fabricmc:sponge-mixin:0.12.5+'
implementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
implementation 'net.minecraftforge:mergetool:1.1.7'
implementation 'net.neoforged:mergetool:2.0.2'
}
tasks.withType(JavaCompile) {
options.release = 17
}
shadowJar {
dependencies {
include(dependency('net.fabricmc:sponge-mixin:'))
include(dependency('net.fabricmc:fabric-loader:'))
include(dependency(':mergetool:'))
}
// shadowJar bug
include '*.jar'
include 'META-INF/services/javax.annotation.processing.Processor'
include 'META-INF/gradle/incremental.annotation.processors'
include 'org/spongepowered/asm/mixin/Mixin.class'
include 'org/fury_phoenix/**/*'
include {it.getName() == 'OnlyIn.class'}
include {it.getName() == 'Dist.class'}
include {it.getName() == 'Environment.class'}
include {it.getName() == 'EnvType.class'}
}
version = '1.1.4'

View File

@ -0,0 +1,184 @@
package org.fury_phoenix.mixinAp.annotation;
import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.processing.Messager;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationValue;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.Diagnostic;
import net.fabricmc.api.Environment;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.annotation.IgnoreMixin;
import org.fury_phoenix.mixinAp.util.TypedAccessorMap;
import org.spongepowered.asm.mixin.Mixin;
import static com.google.auto.common.AnnotationMirrors.getAnnotationValue;
import static java.util.AbstractMap.SimpleImmutableEntry;
public class ClientMixinValidator {
private final Messager messager;
private final Elements elemUtils;
private final Types types;
private final boolean debug;
private static final TypedAccessorMap<Annotation> markers = new TypedAccessorMap<>();
private static final Map.Entry<Class<Environment>, Function<? super Environment, ?>>
FabricAccessor = new SimpleImmutableEntry<>(Environment.class, Environment::value);
private static final Map.Entry<
Class<net.minecraftforge.api.distmarker.OnlyIn>,
Function<? super net.minecraftforge.api.distmarker.OnlyIn, ?>>
ForgeAccessor = new SimpleImmutableEntry<>(
net.minecraftforge.api.distmarker.OnlyIn.class,
net.minecraftforge.api.distmarker.OnlyIn::value
);
private static final Map.Entry<
Class<net.neoforged.api.distmarker.OnlyIn>,
Function<? super net.neoforged.api.distmarker.OnlyIn, ?>>
NeoForgeAccessor = new SimpleImmutableEntry<>(
net.neoforged.api.distmarker.OnlyIn.class,
net.neoforged.api.distmarker.OnlyIn::value
);
static {
markers.put(FabricAccessor);
markers.put(ForgeAccessor);
markers.put(NeoForgeAccessor);
}
private static final Collection<String> unannotatedClasses = new HashSet<>();
public ClientMixinValidator(ProcessingEnvironment env) {
debug = Boolean.valueOf(env.getOptions().get("org.fury_phoenix.mixinAp.validator.debug"));
messager = env.getMessager();
elemUtils = env.getElementUtils();
types = env.getTypeUtils();
}
public boolean validateMixin(TypeElement annotatedMixinClass) {
return targetsClient(annotatedMixinClass) &&
(annotatedMixinClass.getAnnotation(ClientOnlyMixin.class) == null);
}
public boolean targetsClient(TypeElement annotatedMixinClass) {
return targetsClient(getTargets(annotatedMixinClass)) &&
!isIgnored(annotatedMixinClass);
}
private boolean targetsClient(Collection<?> classTargets) {
return classTargets.stream().anyMatch(this::targetsClient);
}
private boolean targetsClient(Object classTarget) {
if (classTarget instanceof TypeElement te) {
return isClientMarked(te);
} else if (classTarget instanceof TypeMirror tm) {
var el = types.asElement(tm);
return el != null ? targetsClient(el) : warn("TypeMirror of " + tm);
} else if (classTarget instanceof String s) {
var te = elemUtils.getTypeElement(toSourceString(s.split("\\$")[0]));
return te != null ? targetsClient(te) : warn(s);
} else {
throw new IllegalArgumentException("Unhandled type: "
+ classTarget.getClass() + "\n" + "Stringified contents: "
+ classTarget.toString());
}
}
private boolean isClientMarked(TypeElement te) {
for (var entry : markers.entrySet()) {
var marker = te.getAnnotation(entry.getKey());
if(marker == null) continue;
return entry.getValue().apply(marker).toString().equals("CLIENT");
}
if(debug && unannotatedClasses.add(te.toString())) {
messager.printMessage(Diagnostic.Kind.WARNING,
"No marker annotations present on " + te + "!");
}
return false;
}
private boolean isIgnored(TypeElement te) {
if(te.getAnnotation(IgnoreMixin.class) != null) {
messager.printMessage(Diagnostic.Kind.WARNING,
toSourceString(te.toString()) + " is ignored!");
return true;
}
return false;
}
private boolean warn(Object o) {
messager.printMessage(Diagnostic.Kind.WARNING,
toSourceString(o.toString()) + " can't be loaded, so it is skipped!");
return false;
}
public Map.Entry<? extends CharSequence, ? extends CharSequence>
getClientMixinEntry(TypeElement annotatedMixinClass) {
return new SimpleImmutableEntry<>(
annotatedMixinClass.getQualifiedName(),
getTargets(annotatedMixinClass)
.stream()
.filter(this::targetsClient)
.map(Object::toString)
.map(ClientMixinValidator::toSourceString)
.collect(Collectors.joining(", "))
);
}
private Collection<Object> getTargets(TypeElement annotatedMixinClass) {
Collection<? extends TypeMirror> clzsses = Set.of();
Collection<? extends String> imaginaries = Set.of();
TypeMirror MixinElement = elemUtils.getTypeElement(Mixin.class.getName()).asType();
for (var mirror : annotatedMixinClass.getAnnotationMirrors()) {
if(!types.isSameType(mirror.getAnnotationType(), MixinElement))
continue;
@SuppressWarnings("unchecked")
var wrappedClzss = (List<? extends AnnotationValue>)
getAnnotationValue(mirror, "value").getValue();
clzsses = wrappedClzss.stream()
.map(AnnotationValue::getValue)
.map(TypeMirror.class::cast)
.collect(Collectors.toSet());
@SuppressWarnings("unchecked")
var wrappedStrings = (List<? extends AnnotationValue>)
getAnnotationValue(mirror, "targets").getValue();
imaginaries = wrappedStrings.stream()
.map(AnnotationValue::getValue)
.map(String.class::cast)
.collect(Collectors.toSet());
}
return Stream.of(clzsses, imaginaries)
.flatMap(Collection::stream)
.collect(Collectors.toSet());
}
public static String toSourceString(String bytecodeName) {
return bytecodeName.replaceAll("\\/", ".");
}
}

View File

@ -0,0 +1,118 @@
package org.fury_phoenix.mixinAp.annotation;
import com.google.auto.service.AutoService;
import com.google.common.base.Throwables;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.Processor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedOptions;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic;
import org.fury_phoenix.mixinAp.config.MixinConfig;
@SupportedAnnotationTypes({"org.spongepowered.asm.mixin.Mixin", "org.embeddedt.modernfix.annotation.ClientOnlyMixin"})
@SupportedOptions({"rootProject.name", "project.name", "org.fury_phoenix.mixinAp.validator.debug"})
@AutoService(Processor.class)
public class MixinProcessor extends AbstractProcessor {
// Remember to call toString when using aliases
private static final Map<String, String> aliases = Map.of(
"Mixin", "mixins",
"ClientOnlyMixin", "client"
);
private final Map<String, List<String>> mixinConfigList = new HashMap<>();
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
try {
if(roundEnv.processingOver()){
filterMixinSets();
// create record for serialization, compute package name
String packageName = Optional.ofNullable(mixinConfigList.get("mixins"))
.orElse(mixinConfigList.get("client"))
.get(0).split("(?<=mixin)")[0];
finalizeMixinConfig();
new MixinConfig(packageName,
mixinConfigList.get("mixins"),
mixinConfigList.get("client")
).generateMixinConfig(processingEnv);
} else {
processMixins(annotations, roundEnv);
}
} catch (Exception e) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Fatal error:" +
Throwables.getStackTraceAsString(e));
throw new RuntimeException(e);
// Halt the AP to prevent nonsense errors
}
return false;
}
private void processMixins(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement annotation : annotations) {
Set<? extends Element> annotatedMixins = roundEnv.getElementsAnnotatedWith(annotation);
Stream<TypeElement> mixinStream =
annotatedMixins.stream()
.map(TypeElement.class::cast);
validateCommonMixins(annotation, mixinStream);
List<String> mixins =
annotatedMixins.stream()
.map(TypeElement.class::cast)
.map(e -> processingEnv.getElementUtils().getBinaryName(e).toString())
.collect(Collectors.toList());
mixinConfigList.putIfAbsent(aliases.get(annotation.getSimpleName().toString()), mixins);
}
}
private void filterMixinSets() {
List<String> commonSet = mixinConfigList.get("mixins");
if(commonSet == null) return;
commonSet.removeAll(mixinConfigList.get("client"));
}
private void validateCommonMixins(TypeElement annotation, Stream<TypeElement> mixins) {
if(!annotation.getSimpleName().toString().equals("Mixin"))
return;
ClientMixinValidator validator = new ClientMixinValidator(processingEnv);
// The implementation may throw a CME
mixins.sequential()
.filter(validator::validateMixin)
.map(validator::getClientMixinEntry)
.forEach(this::logClientClassTarget);
}
private void logClientClassTarget(Map.Entry<? extends CharSequence, ? extends CharSequence> mixin) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
"Mixin " + mixin.getKey() + " targets client-side classes: " + mixin.getValue());
}
private void finalizeMixinConfig() {
// relativize class names
for(var list : mixinConfigList.values()) {
list.replaceAll(className -> className.split("(?<=mixin.)")[1]);
}
}
}

View File

@ -0,0 +1,65 @@
package org.fury_phoenix.mixinAp.config;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;
import java.io.IOException;
import java.io.Writer;
import java.util.List;
import java.util.Optional;
import javax.annotation.processing.ProcessingEnvironment;
import javax.tools.StandardLocation;
public record MixinConfig(
boolean required,
String minVersion,
@SerializedName("package")
String packageName,
String plugin,
String compatibilityLevel,
@SerializedName("mixins")
List<String> commonMixins,
@SerializedName("client")
List<String> clientMixins,
InjectorOptions injectors, OverwriteOptions overwrites
) {
public MixinConfig(String packageName, List<String> commonMixins, List<String> clientMixins) {
this(true, "0.8", packageName, "org.embeddedt.modernfix.core.ModernFixMixinPlugin", "JAVA_17",
commonMixins, clientMixins, InjectorOptions.DEFAULT, OverwriteOptions.DEFAULT);
}
public record InjectorOptions(int defaultRequire) {
public static final InjectorOptions DEFAULT = new InjectorOptions(1);
}
public record OverwriteOptions(boolean conformVisibility) {
public static final OverwriteOptions DEFAULT = new OverwriteOptions(true);
}
public void generateMixinConfig(ProcessingEnvironment env) throws IOException {
try (
Writer mixinConfigWriter = env.getFiler()
.createResource(StandardLocation.SOURCE_OUTPUT, "",
MixinConfig.computeMixinConfigPath(
Optional.of(env.getOptions().get("rootProject.name")),
Optional.ofNullable(env.getOptions().get("project.name"))
)
).openWriter()
) {
String mixinConfig = new GsonBuilder()
.setPrettyPrinting()
.create()
.toJson(this);
mixinConfigWriter.write(mixinConfig);
mixinConfigWriter.write("\n");
} catch (IOException e) { throw e; }
}
private static String computeMixinConfigPath(Optional<String> rootProjectName, Optional<String> projectName) {
return "resources/" +
rootProjectName.get() +
(projectName.isPresent() ? "-" : "") +
projectName.orElse("") +
".mixins.json";
}
}

View File

@ -0,0 +1,37 @@
package org.fury_phoenix.mixinAp.util;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import static java.util.Map.Entry;
/**
* Type-safe heterogenous map of accessors
* @author Fury_Phoenix
* @reason Type-safety since K, V of Map are non-identical
* @param <SuperType> The supertype of desired types.
* This is useful in cases such as <A extends Annotation>.
*/
public class TypedAccessorMap<SuperType> {
private final Map<Class<? extends SuperType>, Function<Object, ?>> typedAccessors = new HashMap<>();
public <T extends SuperType> void put(Class<T> key, Function<? super T, ?> func) {
Objects.requireNonNull(func);
typedAccessors.put(Objects.requireNonNull(key), o -> func.apply(key.cast(o)));
}
public <T extends SuperType> void put(Entry<Class<T>, Function<? super T, ?>> entry) {
put(entry.getKey(), entry.getValue());
}
public <T extends SuperType> Function<Object, ?> get(Class<T> key) {
return typedAccessors.get(key);
}
public Set<Entry<Class<? extends SuperType>, Function<Object, ?>>> entrySet() {
return typedAccessors.entrySet();
}
}

View File

@ -0,0 +1 @@
org.fury_phoenix.mixinAp.annotation.MixinProcessor,aggregating

View File

@ -0,0 +1,10 @@
plugins {
id("java")
}
version = "1.1.0"
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

View File

@ -0,0 +1,11 @@
package org.embeddedt.modernfix.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface ClientOnlyMixin {
}

View File

@ -0,0 +1,9 @@
package org.embeddedt.modernfix.annotation;
public enum FeatureLevel {
GA, BETA;
public boolean isAtLeast(FeatureLevel required) {
return this.ordinal() >= required.ordinal();
}
}

View File

@ -0,0 +1,11 @@
package org.embeddedt.modernfix.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.TYPE)
public @interface IgnoreMixin {
}

View File

@ -0,0 +1,15 @@
package org.embeddedt.modernfix.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* The config system will ignore mixins with this annotation when generating config options unless running
* in a dev environment.
*/
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface IgnoreOutsideDev {
}

View File

@ -0,0 +1,12 @@
package org.embeddedt.modernfix.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE, ElementType.PACKAGE})
public @interface RequiresFeatureLevel {
FeatureLevel value() default FeatureLevel.GA;
}

View File

@ -0,0 +1,12 @@
package org.embeddedt.modernfix.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE, ElementType.PACKAGE})
public @interface RequiresMod {
String value() default "";
}

1
bin/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.jar

View File

@ -1,146 +0,0 @@
plugins {
id "dev.architectury.loom" version "1.0.312"
id "maven-publish"
id 'com.matthewprenger.cursegradle' version '1.4.0'
}
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17
group = 'org.embeddedt'
version = '1.6.0-beta3'
java {
archivesBaseName = 'modernfix-mc' + minecraft_version
}
loom {
// use this if you are using the official mojang mappings
// and want loom to stop warning you about their license
silentMojangMappingsLicense()
// since loom 0.10, you are **required** to use the
// "forge" block to configure forge-specific features,
// such as the mixinConfigs array or datagen
forge {
// specify the mixin configs used in this mod
// this will be added to the jar manifest as well!
mixinConfigs = [
"modernfix.mixins.json"
]
}
mixin.defaultRefmapName = "modernfix.refmap.json"
}
repositories {
maven { url 'https://modmaven.dev/' }
maven {
url "https://cursemaven.com"
content {
includeGroup "curse.maven"
}
}
maven {
name = 'ParchmentMC'
url = 'https://maven.parchmentmc.org'
}
}
dependencies {
// to change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}"
// choose what mappings you want to use here
// leave this uncommented if you want to use
// mojang's official mappings, or feel free
// to add your own mappings here (how about
// mojmap layered with parchment, for example?)
mappings loom.layered() {
officialMojangMappings()
parchment("org.parchmentmc.data:parchment-${minecraft_version}:${parchment_version}@zip")
}
// uncomment this if you want to use yarn mappings
// mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
// your forge dependency, this is **required** when using Forge Loom in forge mode!
forge "net.minecraftforge:forge:${project.forge_version}"
modRuntimeOnly "curse.maven:lazydfu-460819:${lazydfu_version}"
modCompileOnly("curse.maven:refinedstorage-243076:${refined_storage_version}")
// compile against the JEI API but do not include it at runtime
modCompileOnly("mezz.jei:jei-${minecraft_version}-forge:${jei_version}")
}
tasks.withType(JavaCompile) {
// ensure that the encoding is set to UTF-8, no matter what the system default is
// this fixes some edge cases with special characters not displaying correctly
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
// If Javadoc is generated, this must be specified in that task too.
options.encoding = "UTF-8"
def targetVersion = 17
if (JavaVersion.current().isJava9Compatible()) {
options.release = targetVersion
}
}
java {
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present.
// If you remove this line, sources will not be generated.
withSourcesJar()
}
// Example for how to get properties into the manifest for reading at runtime.
jar {
manifest {
attributes([
"Specification-Title" : "modernfix",
"Operative-Class" : "org.embeddedt.modernfix.agent.Agent",
//"Specification-Vendor": "modernfix authors",
"Specification-Version" : "1", // We are version 1 of ourselves
"Implementation-Title" : project.name,
"Implementation-Version" : project.jar.archiveVersion,
//"Implementation-Vendor": "modernfix authors",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
}
// configure the maven publication
publishing {
publications {
mavenJava(MavenPublication) {
// add all the jars that should be included when publishing to maven
artifact(remapJar) {
builtBy remapJar
}
artifact(sourcesJar) {
builtBy remapSourcesJar
}
}
}
// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories {
// Add repositories to publish to here.
// Notice: This block does NOT have the same function as the block in the top level.
// The repositories here will be used for publishing your artifact, not for
// retrieving dependencies.
}
}
curseforge {
if (System.getenv("CURSEFORGE_TOKEN") != null) {
apiKey = System.getenv("CURSEFORGE_TOKEN")
project {
id = "790626"
changelog = '[Changelog is not currently available]'
changelogType = "markdown"
releaseType = "release"
addGameVersion "Forge"
addGameVersion minecraft_version
}
}
}

210
build.gradle.kts Normal file
View File

@ -0,0 +1,210 @@
plugins {
id("net.neoforged.moddev.legacyforge") version("2.0.134")
id("me.modmuss50.mod-publish-plugin") version("1.1.0")
}
val minecraft_version = rootProject.properties["minecraft_version"].toString()
group = "org.embeddedt"
val gitVersion = providers.of(GitVersionSource::class) {
parameters {
minecraftVersion.set(minecraft_version)
projectDir.set(rootProject.layout.projectDirectory)
}
}
version = gitVersion.get()
base.archivesName = "modernfix-forge"
legacyForge {
enable {
forgeVersion = rootProject.properties["forge_version"].toString()
isDisableRecompilation = System.getenv("CI") == "true"
}
rootProject.properties["parchment_version"]?.let { parchmentVer ->
parchment {
minecraftVersion = minecraft_version
mappingsVersion = parchmentVer.toString()
}
}
runs {
create("client") {
client()
}
create("server") {
server()
}
create("auditClient") {
client()
jvmArguments.addAll("-Dmodernfix.auditAndExit=true", "-Djava.awt.headless=true")
}
}
mods {
create("modernfix") {
sourceSet(sourceSets.main.get())
}
}
}
mixin {
add(sourceSets.main.get(), "modernfix.refmap.json")
config("modernfix-modernfix.mixins.json")
}
tasks.named<Jar>("jar") {
manifest.attributes(mapOf(
"MixinConfigs" to "modernfix-modernfix.mixins.json",
"Specification-Version" to "1",
"Implementation-Title" to project.name,
"Implementation-Version" to version
))
}
java {
val curSourceCompatLevel = JavaVersion.VERSION_17
sourceCompatibility = curSourceCompatLevel
targetCompatibility = curSourceCompatLevel
}
repositories {
exclusiveContent {
forRepository {
maven {
// location of the maven that hosts JEI files
name = "Progwml6 maven"
url = uri("https://dvs1.progwml6.com/files/maven/")
}
}
forRepository {
maven {
name = "ModMaven"
url = uri("https://modmaven.dev")
}
}
filter {
includeGroup("mezz.jei")
}
}
exclusiveContent {
forRepository {
maven("https://cursemaven.com")
}
filter {
includeGroup("curse.maven")
}
}
}
val embed by configurations.creating {
isCanBeConsumed = false
isCanBeResolved = true
isTransitive = true
}
dependencies {
implementation(project(":annotations"))
embed(project(":annotations"))
"additionalRuntimeClasspath"(project(":annotations"))
annotationProcessor(project(path = ":annotation-processor", configuration = "shadow"))
val mixinextrasVersion = rootProject.properties["mixinextras_version"].toString()
implementation("io.github.llamalad7:mixinextras-common:${mixinextrasVersion}")
annotationProcessor("net.fabricmc:sponge-mixin:0.12.5+mixin.0.8.5")
annotationProcessor("io.github.llamalad7:mixinextras-common:${mixinextrasVersion}")
implementation("io.github.llamalad7:mixinextras-forge:${mixinextrasVersion}")
"jarJar"("io.github.llamalad7:mixinextras-forge:${mixinextrasVersion}")
val jei_version = rootProject.properties["jei_version"].toString()
modCompileOnly("mezz.jei:jei-${minecraft_version}-forge:${jei_version}")
modCompileOnly("curse.maven:spark-361579:${rootProject.properties["spark_version"].toString()}")
modCompileOnly("curse.maven:ctm-267602:${rootProject.properties["ctm_version"].toString()}")
modCompileOnly("curse.maven:ldlib-626676:${rootProject.properties["ldlib_version"].toString()}")
modCompileOnly("curse.maven:supermartijncore-454372:4455391")
modCompileOnly("curse.maven:patchouli-306770:6164575")
modCompileOnly("curse.maven:cofhcore-69162:5374122")
modCompileOnly("curse.maven:resourcefullib-570073:5659871")
modCompileOnly("curse.maven:kubejs-238086:5853326")
modCompileOnly("curse.maven:terrablender-563928:6290448")
}
tasks.named<Jar>("jar") {
from(embed.map { if (it.isDirectory) it else zipTree(it) })
}
// For the AP
tasks.withType<JavaCompile>().configureEach {
if (!name.lowercase().contains("test")) {
options.compilerArgs.addAll(
listOf(
"-ArootProject.name=${rootProject.name}",
"-Aproject.name=${project.name}"
)
)
}
}
sourceSets {
main {
resources.srcDir(
layout.buildDirectory.dir("generated/sources/annotationProcessor/java/main/resources")
)
}
}
tasks.named<ProcessResources>("processResources") {
dependsOn(tasks.named("compileJava"))
inputs.property("version", project.version)
filesMatching("META-INF/mods.toml") {
expand("version" to project.version)
}
}
val finalJarTask = "reobfJar"
tasks.register<Copy>("copyJarNameConsistent") {
from(tasks.named<Jar>(finalJarTask).get().outputs.files)
into(project.file("build/libs"))
rename { _ -> "modernfix-" + project.name + "-latest.jar" }
}
tasks.register<Copy>("copyJarToBin") {
from(tasks.named<Jar>(finalJarTask).get().outputs.files)
into(rootProject.file("bin"))
mustRunAfter(tasks.named("copyJarNameConsistent"))
}
tasks.named("build") {
dependsOn("copyJarToBin", "copyJarNameConsistent")
}
publishMods {
file.set(tasks.named<Jar>(finalJarTask).flatMap { it.archiveFile })
displayName.set(tasks.named<Jar>(finalJarTask).flatMap { it.archiveFileName })
changelog = "Please check the [GitHub wiki](https://github.com/embeddedt/ModernFix/wiki/Changelog) for major changes."
type = STABLE
modLoaders.add("forge")
curseforge {
projectId = "790626"
projectSlug = "modernfix"
accessToken = providers.environmentVariable("CURSEFORGE_TOKEN")
minecraftVersions.add(minecraft_version)
}
modrinth {
projectId = "nmDcB62a"
accessToken = providers.environmentVariable("MODRINTH_TOKEN")
minecraftVersions.add(minecraft_version)
}
}
tasks.named("publishMods") {
dependsOn(finalJarTask)
}

View File

@ -0,0 +1,7 @@
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
}

View File

@ -0,0 +1,61 @@
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.ValueSource
import org.gradle.api.provider.ValueSourceParameters
import org.gradle.process.ExecOperations
import java.io.ByteArrayOutputStream
import java.io.File
import javax.inject.Inject
abstract class GitVersionSource : ValueSource<String, GitVersionSource.Parameters> {
interface Parameters : ValueSourceParameters {
val minecraftVersion: Property<String>
val projectDir: DirectoryProperty
}
@get:Inject
abstract val execOperations: ExecOperations
override fun obtain(): String {
val minecraftVersion = parameters.minecraftVersion.get()
val workDir = parameters.projectDir.get().asFile
val releaseLine = workDir.resolve("release_line.txt").readText().trim()
val patch = try {
// Find the most recent first-parent commit that touched release_line.txt
val lineStartCommit = git(workDir,
"log", "--first-parent",
"-n", "1",
"--format=%H",
"--",
"release_line.txt"
).trim()
if (lineStartCommit.isEmpty()) {
// count all first-parent commits as a safe fallback
git(workDir, "rev-list", "--count", "--first-parent", "HEAD")
.trim().toIntOrNull() ?: 0
} else {
git(workDir, "rev-list", "--count", "--first-parent", "$lineStartCommit..HEAD")
.trim().toIntOrNull() ?: 0
}
} catch (_: Exception) {
// Git is unavailable or this is not a git repository
999
}
return "$releaseLine.$patch+mc$minecraftVersion"
}
private fun git(workDir: File, vararg args: String): String {
val output = ByteArrayOutputStream()
execOperations.exec {
commandLine("git", *args)
standardOutput = output
workingDir(workDir)
}
return output.toString(Charsets.UTF_8)
}
}

1
doc/generated/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.md

208
doc/logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 33 KiB

209
doc/logo_transparent.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -1,16 +1,34 @@
# Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G
org.gradle.jvmargs=-Xmx2G
# tell architectury loom that this project is a forge project.
# this will enable us to use the "forge" dependency.
# using archloom without this is possible and will give you a
# "standard" loom installation with some extra features.
loom.platform=forge
junit_version=5.10.0-M1
mixinextras_version=0.4.1
mod_id=modernfix
minecraft_version=1.18.2
forge_version=1.18.2-40.2.1
lazydfu_version=3544496
parchment_version=2022.11.06
refined_storage_version=4392829
jei_version=10.2.1.283
minecraft_version=1.20.1
enabled_platforms=forge
forge_version=1.20.1-47.4.0
parchment_version=2023.07.09
refined_storage_version=4392788
jei_version=15.8.0.11
rei_version=11.0.597
ctm_version=5983309
ldlib_version=5927130
kubejs_version=2001.6.5-build.16
rhino_version=2001.2.3-build.10
supported_minecraft_versions=1.20.1
fabric_loader_version=0.16.10
fabric_api_version=0.86.0+1.20.1
continuity_version=3.0.0-beta.2+1.19.3
modmenu_version=7.0.0-beta.2
diagonal_fences_version=4558828
spark_version=4587310
use_fabric_api_at_runtime=true
# Look up maven coordinates when changing shadow_version
shadow_version=7.1.2

View File

@ -0,0 +1,9 @@
Depending on the size of this release, there may be a human-readable changelog available on [the wiki page](https://github.com/embeddedt/ModernFix/wiki/Changelog).
## Changes since [[modernFixVersionRef]]
{{#commits}}
{{#ifMatches messageTitle "^(?!Merge).*"}}
* [{{{messageTitle}}}](https://github.com/embeddedt/ModernFix/commit/{{hashFull}}) - {{{authorName}}}
{{/ifMatches}}
{{/commits}}

Binary file not shown.

View File

@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

44
gradlew vendored
View File

@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@ -80,13 +82,12 @@ do
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -133,22 +134,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -193,11 +201,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
@ -205,6 +217,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.

37
gradlew.bat vendored
View File

@ -13,8 +13,10 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%" == "" @echo off
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@ -25,7 +27,8 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@ -75,13 +78,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal

1
release_line.txt Normal file
View File

@ -0,0 +1 @@
5.27

53
scripts/autorelease.sh Executable file
View File

@ -0,0 +1,53 @@
#!/bin/bash
set -e
WORK_DIR=`mktemp -d`
# deletes the temp directory
function cleanup {
cd $HOME
rm -rf "$WORK_DIR"
}
trap cleanup EXIT
# clone ModernFix repo
echo "downloading temporary modernfix..."
cd $WORK_DIR
git clone git@github.com:embeddedt/ModernFix.git mfix &>/dev/null
cd mfix
# gather version list
readarray -t all_versions < <(scripts/branchlist.sh)
last_released_version=""
do_release() {
echo "will now make release for $1"
git checkout $1 &>/dev/null || git checkout -b $1 &>/dev/null
current_tag=$(git describe --tags --abbrev=0)
echo "we think the current tag is $current_tag"
echo "the current commit head is $(git rev-parse HEAD)"
old_version_specifier=$(echo $current_tag | awk -F+ '{print $2}')
read -e -p "new tag name (${old_version_specifier}): " -i "${last_released_version}" tag_name
if [[ $tag_name != *"+"* ]]; then
tag_name=${tag_name}+${old_version_specifier}
fi
last_released_version=$(echo $tag_name | awk -F+ '{print $1}')
git tag -a $tag_name -m "$tag_name"
git push --tags
gh release create $tag_name --target $1 --title "$tag_name" --notes ""
# now delete local tag to prevent messing up the detected tag for the next version
git tag -d $tag_name &>/dev/null
}
for version in "${all_versions[@]}"; do
read -r -p "Make release on ${version} branch? [y/N] " response
case "$response" in
[yY][eE][sS]|[yY])
do_release $version
;;
*)
;;
esac
done

2
scripts/branchlist.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
git ls-remote --heads origin | awk '{print $2}' | grep -E '^refs/heads/[0-9]+\.' | sed 's:.*/::' | sort -V | grep -E '^[0-9]+\.[0-9]*(\.[0-9]*)?$'

View File

@ -0,0 +1,51 @@
#!/usr/bin/python3
import argparse, json, os, subprocess, sys
# to import other scripts in same folder
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
from contextlib import redirect_stdout
from modernfixlib import get_valid_mixin_options
parser = argparse.ArgumentParser(description='Generate ModernFix patch summary Markdown file.')
parser.add_argument('-p', '--langpath', default='src/main/resources/assets/modernfix/lang/en_us.json')
args = parser.parse_args()
branch_name = subprocess.check_output(['git', 'branch', '--show-current']).decode("utf-8").strip()
with open('doc/generated/' + branch_name + '-Summary-of-Patches.md', 'w') as output_file:
all_current_mixin_options = get_valid_mixin_options()
options_missing_descriptions = set()
with redirect_stdout(output_file):
with open(args.langpath) as lang_json:
lang_obj = json.loads(lang_json.read())
option_names = set()
for key, value in lang_obj.items():
if key.startswith("modernfix.option.mixin."):
option_names.add(key.replace("modernfix.option.", ""))
option_names_sorted = list(option_names)
option_names_sorted.sort()
print()
for option in option_names_sorted:
if option not in all_current_mixin_options:
continue
option_description = lang_obj.get("modernfix.option." + option)
option_friendly_name = lang_obj.get("modernfix.option.name." + option)
print(f"### `{option}`")
print()
if option_description is not None:
print(option_description)
print("")
else:
options_missing_descriptions.add(option)
options_missing_descriptions.update(all_current_mixin_options.difference(option_names))
# sort the list of missing descriptions and print them out if there are any
missing_descriptions_list = list(options_missing_descriptions)
missing_descriptions_list.sort()
num_missing = len(missing_descriptions_list)
if num_missing > 0:
print(f"Missing {num_missing} descriptions:")
for option in missing_descriptions_list:
print(f" - {option}")

View File

@ -0,0 +1,13 @@
#!/usr/bin/python3
import re
with open('Summary-of-Patches.md', 'r') as file:
data = file.read().rstrip()
matches = re.findall(r"## `(.*?)`((?:(?!\n#).)*)", data, re.DOTALL)
for m in matches:
option_name = m[0].strip()
option_desc = m[1].strip().replace("\n", "\\n").replace('"', '\\"')
print(f" \"modernfix.option.mixin.{m[0].strip()}\": \"{option_desc}\",")

22
scripts/modernfixlib.py Normal file
View File

@ -0,0 +1,22 @@
import os
import re
def get_valid_mixin_options():
all_mixin_options = set()
# gather all mixins in mixin folders
for platform in [ "common", "forge" ]:
base_path = f"{platform}/src/main/java/org/embeddedt/modernfix/{platform}/mixin"
for root, dirs, files in os.walk(base_path):
for file in files:
if file.endswith(".java"):
mixin_name = root.replace(base_path, "").replace(os.path.sep, ".")
if mixin_name.startswith("."):
mixin_name = mixin_name[1:]
all_mixin_options.add("mixin." + mixin_name)
# gather any mixin strings referenced in ModernFixEarlyConfig
with open('src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java') as config_java:
for line in config_java:
for option in re.findall(r"\.put[A-Za-z_]*\(.*\"(mixin(?:\.[a-z_]+)+)\"", line):
all_mixin_options.add(option)
return all_mixin_options

57
scripts/propagate.sh Executable file
View File

@ -0,0 +1,57 @@
#!/bin/bash
set -e
WORK_DIR=`mktemp -d`
# deletes the temp directory
function cleanup {
cd $HOME
rm -rf "$WORK_DIR"
}
trap cleanup EXIT
trap "exit" INT
# clone ModernFix repo
echo "downloading temporary modernfix..."
cd $WORK_DIR
git clone git@github.com:embeddedt/ModernFix.git mfix &>/dev/null
cd mfix
# gather version list
readarray -t all_versions < <(scripts/branchlist.sh)
echo "found versions: ${all_versions[@]}"
# checkout base version
git checkout -b propagations/${all_versions[0]} origin/${all_versions[0]} &>/dev/null
our_version=${all_versions[0]}
restore_version=$our_version
for version in "${all_versions[@]}"; do
if ! { echo "$version"; echo "$our_version"; } | sort --version-sort --check &>/dev/null; then
echo -n "merging $our_version into ${version}... "
git checkout -b propagations/$version origin/$version &>/dev/null
if ! git merge --no-commit propagations/$our_version &>/dev/null; then
merge_failed=yes
echo "failed, this merge must be done manually using the provided shell"
else
merge_failed=no
echo -n "done"
fi
if [ "x$merge_failed" == "xyes" ]; then
git status
bash
echo -e $'Press any key to commit or Ctrl+C to completely abort...\n'
read -rs -n1
fi
if (git add . && git commit -m "Merge $our_version into $version" &>/dev/null); then
echo
git push -u origin propagations/$version:$version &>/dev/null
else
echo -e "\b\b\b\bnothing to merge"
fi
our_version=$version
fi
done

9
scripts/release.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/bash
echo -n "Currently on: "
git describe
echo -n "New version: "
read newtag
git tag -a $newtag -m "$newtag"
git push
git push --tags
./gradlew fabric:publishToModSites forge:publishToModSites

13
scripts/tagcleaner.sh Executable file
View File

@ -0,0 +1,13 @@
#!/bin/bash
# if current tag is 5.2.3+1.16.5, strip all other 5.2.3+* tags
current_tag=$(git describe --tags --abbrev=0)
current_tag_prefix=$(echo $current_tag | sed 's/+.*/+/g')
git tag | while read -r other_tag; do
if [ "x$other_tag" != "x$current_tag" ] ; then
if [[ $other_tag == ${current_tag_prefix}* ]]; then
git tag -d $other_tag
fi
fi
done

View File

@ -1,10 +0,0 @@
pluginManagement {
repositories {
gradlePluginPortal()
maven { url "https://maven.fabricmc.net/" }
maven { url "https://maven.architectury.dev/" }
maven { url "https://maven.minecraftforge.net/" }
}
}
rootProject.name = 'modernfix'

8
settings.gradle.kts Normal file
View File

@ -0,0 +1,8 @@
include("annotation-processor")
include("annotations")
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version ("1.0.0")
}
rootProject.name = "modernfix"

View File

@ -1,21 +0,0 @@
package org.embeddedt.modernfix;
import com.google.common.cache.CacheLoader;
import org.apache.commons.lang3.tuple.Pair;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FileWalker extends CacheLoader<Pair<Path, Integer>, List<Path>> {
public static final FileWalker INSTANCE = new FileWalker();
@Override
public List<Path> load(Pair<Path, Integer> key) throws Exception {
try(Stream<Path> stream = Files.walk(key.getLeft(), key.getRight())) {
return stream.collect(Collectors.toList());
}
}
}

View File

@ -1,25 +1,24 @@
package org.embeddedt.modernfix;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.server.ServerStartedEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.IExtensionPoint;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.network.NetworkConstants;
import org.apache.commons.lang3.tuple.Pair;
import net.minecraft.SharedConstants;
import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ChunkMap;
import net.minecraft.server.level.ServerLevel;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.embeddedt.modernfix.core.config.ModernFixConfig;
import org.embeddedt.modernfix.command.ModernFixCommands;
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
import org.embeddedt.modernfix.platform.ModernFixPlatformHooks;
import org.embeddedt.modernfix.resources.ReloadExecutor;
import org.embeddedt.modernfix.util.ClassInfoManager;
import org.spongepowered.asm.mixin.MixinEnvironment;
import java.lang.management.ManagementFactory;
import java.util.concurrent.ExecutorService;
// The value here should match an entry in the META-INF/mods.toml file
@Mod(ModernFix.MODID)
public class ModernFix {
// Directly reference a log4j logger.
@ -27,26 +26,72 @@ public class ModernFix {
public static final String MODID = "modernfix";
public static String NAME = "ModernFix";
public static ModernFix INSTANCE;
// Used to skip computing the blockstate caches twice
public static boolean runningFirstInjection = false;
private static ExecutorService resourceReloadService = null;
static {
if(ModernFixMixinPlugin.instance.isOptionEnabled("perf.dedicated_reload_executor.ReloadExecutor")) {
resourceReloadService = ReloadExecutor.createCustomResourceReloadExecutor();
} else {
resourceReloadService = Util.backgroundExecutor();
}
}
public static ExecutorService resourceReloadExecutor() {
return resourceReloadService;
}
public static void runAuditIfRequested() {
boolean auditAndExit = Boolean.getBoolean("modernfix.auditAndExit");
if (auditAndExit || Boolean.getBoolean("modernfix.auditMixinsAtStart")) {
MixinEnvironment.getCurrentEnvironment().audit();
if (auditAndExit) {
// Prevents Crash Assistant from treating mixin audit as a crash
Minecraft.getInstance().stop();
System.exit(0);
}
}
}
public ModernFix() {
INSTANCE = this;
// Register ourselves for server and other game events we are interested in
MinecraftForge.EVENT_BUS.register(this);
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> MinecraftForge.EVENT_BUS.register(new ModernFixClient()));
ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true));
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ModernFixConfig.COMMON_CONFIG);
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.snapshot_easter_egg.NameChange") && !SharedConstants.getCurrentVersion().isStable())
NAME = "PreemptiveFix";
ModernFixPlatformHooks.INSTANCE.onServerCommandRegister(ModernFixCommands::register);
}
@SubscribeEvent
public void onServerStarted(ServerStartedEvent event) {
if(FMLLoader.getDist() == Dist.DEDICATED_SERVER) {
public void onServerStarted() {
if(ModernFixPlatformHooks.INSTANCE.isDedicatedServer()) {
float gameStartTime = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f;
ModernFix.LOGGER.warn("Dedicated server took " + gameStartTime + " seconds to load");
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.ServerLoad"))
ModernFix.LOGGER.warn("Dedicated server took " + gameStartTime + " seconds to load");
ModernFixPlatformHooks.INSTANCE.onLaunchComplete();
}
ClassInfoManager.clear();
}
@SuppressWarnings("ConstantValue")
public void onServerDead(MinecraftServer server) {
/* Clear as much data from the integrated server as possible, in case a mod holds on to it */
try {
for(ServerLevel level : server.getAllLevels()) {
ChunkMap chunkMap = level.getChunkSource().chunkMap;
// Null check for mods that replace chunk system
if(chunkMap.updatingChunkMap != null)
chunkMap.updatingChunkMap.clear();
if(chunkMap.visibleChunkMap != null)
chunkMap.visibleChunkMap.clear();
if(chunkMap.pendingUnloads != null)
chunkMap.pendingUnloads.clear();
}
} catch(RuntimeException e) {
ModernFix.LOGGER.error("Couldn't clear chunk data", e);
}
}
}

View File

@ -1,45 +1,108 @@
package org.embeddedt.modernfix;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.ConnectScreen;
import net.minecraft.client.gui.screens.TitleScreen;
import net.minecraftforge.client.event.ScreenOpenEvent;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.MemoryReserve;
import org.embeddedt.modernfix.api.constants.IntegrationConstants;
import org.embeddedt.modernfix.api.entrypoint.ModernFixClientIntegration;
import org.embeddedt.modernfix.core.ModernFixMixinPlugin;
import org.embeddedt.modernfix.platform.ModernFixPlatformHooks;
import org.embeddedt.modernfix.searchtree.JEIBackedSearchTree;
import org.embeddedt.modernfix.searchtree.SearchTreeProviderRegistry;
import org.embeddedt.modernfix.spark.SparkLaunchProfiler;
import org.embeddedt.modernfix.util.ClassInfoManager;
import org.embeddedt.modernfix.world.IntegratedWatchdog;
import java.lang.management.ManagementFactory;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
public class ModernFixClient {
public static long worldLoadStartTime;
public static ModernFixClient INSTANCE;
public static long worldLoadStartTime = -1;
private static int numRenderTicks;
public static float gameStartTimeSeconds = -1;
public void resetWorldLoadStateMachine() {
numRenderTicks = 0;
worldLoadStartTime = -1;
}
public static boolean recipesUpdated, tagsUpdated = false;
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onMultiplayerConnect(ScreenOpenEvent event) {
if(event.getScreen() instanceof ConnectScreen && !event.isCanceled()) {
worldLoadStartTime = System.nanoTime();
} else if (event.getScreen() instanceof TitleScreen && gameStartTimeSeconds < 0) {
gameStartTimeSeconds = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f;
ModernFix.LOGGER.warn("Game took " + gameStartTimeSeconds + " seconds to start");
public String brandingString = null;
/**
* The list of loaded client integrations.
*/
public static List<ModernFixClientIntegration> CLIENT_INTEGRATIONS = new CopyOnWriteArrayList<>();
public ModernFixClient() {
INSTANCE = this;
// clear reserve as it's not needed
MemoryReserve.release();
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.branding.F3Screen")) {
brandingString = ModernFix.NAME + " " + ModernFixPlatformHooks.INSTANCE.getVersionString();
}
SearchTreeProviderRegistry.register(JEIBackedSearchTree.PROVIDER);
for(String className : ModernFixPlatformHooks.INSTANCE.getCustomModOptions().get(IntegrationConstants.CLIENT_INTEGRATION_CLASS)) {
try {
CLIENT_INTEGRATIONS.add((ModernFixClientIntegration)Class.forName(className).getDeclaredConstructor().newInstance());
} catch(ReflectiveOperationException | ClassCastException e) {
ModernFix.LOGGER.error("Could not instantiate integration {}", className, e);
}
}
if(ModernFixMixinPlugin.instance.isOptionEnabled("perf.dynamic_resources.FireIntegrationHook")) {
for(ModernFixClientIntegration integration : ModernFixClient.CLIENT_INTEGRATIONS) {
integration.onDynamicResourcesStatusChange(true);
}
}
}
@SubscribeEvent
public void onRenderTickEnd(TickEvent.RenderTickEvent event) {
if(event.phase == TickEvent.Phase.END && worldLoadStartTime != -1 && Minecraft.getInstance().player != null && numRenderTicks++ >= 10) {
public void resetWorldLoadStateMachine() {
numRenderTicks = 0;
worldLoadStartTime = -1;
recipesUpdated = false;
tagsUpdated = false;
}
public void onGameLaunchFinish() {
if(gameStartTimeSeconds >= 0)
return;
gameStartTimeSeconds = ManagementFactory.getRuntimeMXBean().getUptime() / 1000f;
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.GameLoad"))
ModernFix.LOGGER.warn("Game took " + gameStartTimeSeconds + " seconds to start");
ModernFixPlatformHooks.INSTANCE.onLaunchComplete();
ClassInfoManager.clear();
}
public void onRecipesUpdated() {
recipesUpdated = true;
}
public void onTagsUpdated() {
tagsUpdated = true;
}
public void onRenderTickEnd() {
if(recipesUpdated
&& tagsUpdated
&& worldLoadStartTime != -1
&& Minecraft.getInstance().player != null
&& numRenderTicks++ >= 10) {
float timeSpentLoading = ((float)(System.nanoTime() - worldLoadStartTime) / 1000000000f);
ModernFix.LOGGER.warn("Time from main menu to in-game was " + timeSpentLoading + " seconds");
ModernFix.LOGGER.warn("Total time to load game and open world was " + (timeSpentLoading + gameStartTimeSeconds) + " seconds");
if(ModernFixMixinPlugin.instance.isOptionEnabled("feature.measure_time.WorldLoad")) {
ModernFix.LOGGER.warn("Time from main menu to in-game was " + timeSpentLoading + " seconds");
ModernFix.LOGGER.warn("Total time to load game and open world was " + (timeSpentLoading + gameStartTimeSeconds) + " seconds");
}
if (ModernFixPlatformHooks.INSTANCE.modPresent("spark") && ModernFixMixinPlugin.instance.isOptionEnabled("feature.spark_profile_world_join.WorldJoin")) {
SparkLaunchProfiler.stop("world_join");
}
resetWorldLoadStateMachine();
}
}
public void onServerStarted(MinecraftServer server) {
if(!ModernFixMixinPlugin.instance.isOptionEnabled("feature.integrated_server_watchdog.IntegratedWatchdog"))
return;
IntegratedWatchdog watchdog = new IntegratedWatchdog(server);
watchdog.start();
}
}

View File

@ -1,59 +0,0 @@
package org.embeddedt.modernfix.agent;
import com.google.common.collect.ImmutableMap;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.*;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
import java.util.function.Function;
public class Agent {
public static void agentmain(String args, Instrumentation instrumentation) {
instrumentation.addTransformer(new EarlyTransformer());
}
private static class EarlyTransformer implements ClassFileTransformer {
private static final ImmutableMap<String, Function<ClassNode, ClassNode>> TRANSFORMERS = ImmutableMap.<String, Function<ClassNode, ClassNode>>builder()
.put("net/minecraftforge/fml/loading/moddiscovery/Scanner", EarlyTransformer::transformScanner)
.build();
private static ClassNode transformScanner(ClassNode input) {
for(MethodNode method : input.methods) {
if(method.name.equals("fileVisitor")) {
for(int i = 0; i < method.instructions.size(); i++) {
AbstractInsnNode ainsn = method.instructions.get(i);
if(ainsn.getOpcode() == Opcodes.INVOKEVIRTUAL) {
MethodInsnNode minsn = (MethodInsnNode)ainsn;
if(minsn.name.equals("accept") && minsn.owner.equals("org/objectweb/asm/ClassReader")) {
method.instructions.set(minsn.getPrevious(), new LdcInsnNode(ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES));
return input;
}
}
}
}
}
return input;
}
@Override
public byte[] transform(ClassLoader classLoader, String s, Class<?> aClass, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException {
Function<ClassNode, ClassNode> func = TRANSFORMERS.get(s);
if(func != null) {
ClassReader reader = new ClassReader(bytes);
ClassNode node = new ClassNode(Opcodes.ASM9);
reader.accept(node, 0);
node = func.apply(node);
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
node.accept(writer);
return writer.toByteArray();
} else
return bytes;
}
}
}

View File

@ -0,0 +1,8 @@
package org.embeddedt.modernfix.api.constants;
public class IntegrationConstants {
public static final String INTEGRATIONS_KEY = "modernfix:integration";
public static final String CLIENT_INTEGRATION_CLASS = "client_entrypoint";
public static final String INTEGRATION_CLASS = "entrypoint";
}

View File

@ -0,0 +1,77 @@
package org.embeddedt.modernfix.api.entrypoint;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.*;
import net.minecraft.resources.ResourceLocation;
import java.util.function.Function;
/**
* Implement this interface in a mod class and add it to "modernfix:integration_v1" in your mod metadata file
* to integrate with ModernFix's features.
*/
public interface ModernFixClientIntegration {
/**
* Called when the dynamic resources status has changed during a model reload so mods know whether to run their
* normal codepath or the dynamic version.
*
* @param enabled whether dynamic resources is enabled
*/
default void onDynamicResourcesStatusChange(boolean enabled) {
}
/**
* Called to allow mods to observe the loading of an unbaked model and either make changes to it or wrap it with their
* own instance.
* @param location the ResourceLocation of the model (this may be a ModelResourceLocation)
* @param originalModel the original model
* @param bakery the model bakery - do not touch internal fields as they probably don't behave the way you expect
* with dynamic resources on
* @return the model which should actually be loaded for this resource location
*/
default UnbakedModel onUnbakedModelLoad(ResourceLocation location, UnbakedModel originalModel, ModelBakery bakery) {
return originalModel;
}
/**
* Called to allow mods to observe the use of an unbaked model at bake time and either make changes to it or wrap it with their
* own instance.
* @param location the ResourceLocation of the model (this may be a ModelResourceLocation)
* @param originalModel the original model
* @param bakery the model bakery - do not touch internal fields as they probably don't behave the way you expect
* with dynamic resources on
* @return the model which should actually be loaded for this resource location
*/
default UnbakedModel onUnbakedModelPreBake(ResourceLocation location, UnbakedModel originalModel, ModelBakery bakery) {
return originalModel;
}
/**
* Called to allow mods to observe the loading of a baked model and either make changes to it or wrap it with their
* own instance.
* @param location the ResourceLocation of the model (this may be a ModelResourceLocation)
* @param originalModel the original model
* @param bakery the model bakery - do not touch internal fields as they probably don't behave the way you expect
* with dynamic resources on
* @return the model which should actually be loaded for this resource location
*/
@Deprecated
default BakedModel onBakedModelLoad(ResourceLocation location, UnbakedModel baseModel, BakedModel originalModel, ModelState state, ModelBakery bakery) {
return originalModel;
}
/**
* Called to allow mods to observe the loading of a baked model and either make changes to it or wrap it with their
* own instance.
* @param location the ResourceLocation of the model (this may be a ModelResourceLocation)
* @param originalModel the original model
* @param bakery the model bakery - do not touch internal fields as they probably don't behave the way you expect
* with dynamic resources on
* @param textureGetter function to retrieve textures for this model
* @return the model which should actually be loaded for this resource location
*/
default BakedModel onBakedModelLoad(ResourceLocation location, UnbakedModel baseModel, BakedModel originalModel, ModelState state, ModelBakery bakery, Function<Material, TextureAtlasSprite> textureGetter) {
return onBakedModelLoad(location, baseModel, originalModel, state, bakery);
}
}

View File

@ -0,0 +1,87 @@
package org.embeddedt.modernfix.api.helpers;
import com.google.common.collect.ImmutableList;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.model.*;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import org.embeddedt.modernfix.duck.IExtendedModelBakery;
import org.embeddedt.modernfix.dynamicresources.ModelBakeryHelpers;
import org.embeddedt.modernfix.util.DynamicMap;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;
@SuppressWarnings("unused")
public final class ModelHelpers {
/**
* Allows converting a ModelResourceLocation back into the corresponding BlockState(s). Try to avoid calling this
* multiple times if possible.
* @param location the location of the model
* @return a list of all blockstates related to the model
*/
public static ImmutableList<BlockState> getBlockStateForLocation(ModelResourceLocation location) {
Optional<Block> blockOpt = BuiltInRegistries.BLOCK.getOptional(new ResourceLocation(location.getNamespace(), location.getPath()));
if(blockOpt.isPresent())
return ModelBakeryHelpers.getBlockStatesForMRL(blockOpt.get().getStateDefinition(), location);
else
return ImmutableList.of();
}
/**
* Allows converting a ModelResourceLocation back into the corresponding BlockState(s). Faster version of its
* companion function if and only if you know the corresponding Block already for some reason.
* @param definition the state definition for the Block
* @param location the location of the model
* @return a list of all blockstates related to the model
*/
public static ImmutableList<BlockState> getBlockStateForLocation(StateDefinition<Block, BlockState> definition, ModelResourceLocation location) {
return ModelBakeryHelpers.getBlockStatesForMRL(definition, location);
}
/**
* Compatibility helper for mods to use to get a map-like view of the model bakery.
* @param modelGetter the model getter function supplied by the integration class
* @return a fake map of the top-level models
*/
public static Map<ResourceLocation, BakedModel> createFakeTopLevelMap(BiFunction<ResourceLocation, ModelState, BakedModel> modelGetter) {
return new DynamicMap<>(location -> modelGetter.apply(location, BlockModelRotation.X0_Y0));
}
/**
* Provides a ModelBaker for mods to use.
* @param bakery the ModelBakery supplied to your integration
* @return an appropriate ModelBaker
*/
public static ModelBaker adaptBakery(ModelBakery bakery) {
return new ModelBaker() {
@Override
public UnbakedModel getModel(ResourceLocation resourceLocation) {
return bakery.getModel(resourceLocation);
}
@Nullable
@Override
public BakedModel bake(ResourceLocation resourceLocation, ModelState modelState) {
return ((IExtendedModelBakery)bakery).bakeDefault(resourceLocation, modelState);
}
@Override
public @Nullable BakedModel bake(ResourceLocation location, ModelState state, Function<Material, TextureAtlasSprite> sprites) {
throw new UnsupportedOperationException();
}
@Override
public Function<Material, TextureAtlasSprite> getModelTextureGetter() {
return Material::sprite;
}
};
}
}

View File

@ -0,0 +1,185 @@
package org.embeddedt.modernfix.benchmark;
import com.google.common.util.concurrent.MoreExecutors;
import com.mojang.datafixers.util.Either;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.*;
import net.minecraft.util.Unit;
import net.minecraft.world.entity.ai.village.poi.PoiManager;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.chunk.*;
import net.minecraft.world.level.chunk.storage.ChunkSerializer;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
import org.embeddedt.modernfix.ModernFix;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.Function;
public class WorldgenBenchmark {
private static final TicketType<Unit> BENCHMARK_TICKET =
TicketType.create("modernfix_benchmark", (a, b) -> 0);
private static final List<ChunkStatus> ALL_STATUSES = ChunkStatus.getStatusList().stream()
.filter(s -> s.getIndex() > ChunkStatus.EMPTY.getIndex()
&& s.getIndex() < ChunkStatus.INITIALIZE_LIGHT.getIndex())
.toList();
private static final int REQUIRED_LOAD_RADIUS = ALL_STATUSES.stream().mapToInt(ChunkStatus::getRange).max().orElse(0);
public static String run(ServerLevel level, ChunkPos center, int testRadius, int iterations, ChunkStatus startStatus, ChunkStatus stopStatus) {
int startIndex = ALL_STATUSES.indexOf(startStatus);
if (startIndex < 0) {
throw new IllegalArgumentException("Invalid start status: " + startStatus);
}
int stopIndex = ALL_STATUSES.indexOf(stopStatus);
if (stopIndex < 0) {
throw new IllegalArgumentException("Invalid stop status:" + stopStatus);
}
List<ChunkStatus> setupStatuses = ALL_STATUSES.subList(0, startIndex);
List<ChunkStatus> timedStatuses = ALL_STATUSES.subList(startIndex, stopIndex + 1);
Context ctx = new Context(level, center, testRadius);
long[] timings = new long[timedStatuses.size()];
int testDiameter = 2 * testRadius + 1;
int numPositions = testDiameter * testDiameter;
ChunkPos[] testPositions = new ChunkPos[numPositions];
CompoundTag[] snapshots = new CompoundTag[numPositions];
ChunkAccess[][] neighborArrays = new ChunkAccess[numPositions][];
int idx = 0;
for (int tz = -testRadius; tz <= testRadius; tz++) {
for (int tx = -testRadius; tx <= testRadius; tx++) {
ChunkPos testPos = new ChunkPos(center.x + tx, center.z + tz);
testPositions[idx] = testPos;
neighborArrays[idx] = ctx.buildNeighborArray(testPos);
ProtoChunk setupProto = ctx.newProtoChunk(testPos);
neighborArrays[idx][ctx.centerIndex] = setupProto;
for (ChunkStatus status : setupStatuses) {
status.generate(ctx.executor, level, ctx.generator, ctx.templates,
ctx.lightEngine, ctx.noopPromotion, Arrays.asList(neighborArrays[idx])).join();
}
snapshots[idx] = ChunkSerializer.write(level, setupProto);
idx++;
ModernFix.LOGGER.info("worldgen benchmark setup progress: {}/{}", idx, numPositions);
}
}
ModernFix.LOGGER.info("worldgen benchmark setup complete");
for (int iter = 0; iter < iterations; iter++) {
ModernFix.LOGGER.info("worldgen benchmark iteration: {}/{}", iter + 1, iterations);
for (int p = 0; p < numPositions; p++) {
ProtoChunk restored = ChunkSerializer.read(
level, ctx.poiManager, testPositions[p], snapshots[p]);
neighborArrays[p][ctx.centerIndex] = restored;
List<ChunkAccess> neighborList = Arrays.asList(neighborArrays[p]);
for (int s = 0; s < timedStatuses.size(); s++) {
long t0 = System.nanoTime();
timedStatuses.get(s).generate(ctx.executor, level, ctx.generator,
ctx.templates, ctx.lightEngine, ctx.noopPromotion, neighborList).join();
timings[s] += System.nanoTime() - t0;
}
}
}
ModernFix.LOGGER.info("worldgen benchmark done");
ctx.cleanup();
return formatTimings(timedStatuses, timings, testRadius, iterations);
}
private static String formatTimings(List<ChunkStatus> statuses, long[] timings, int testRadius, int iterations) {
int totalChunks = (2 * testRadius + 1) * (2 * testRadius + 1) * iterations;
StringBuilder sb = new StringBuilder();
long total = 0;
for (int i = 0; i < timings.length; i++) {
total += timings[i];
String name = BuiltInRegistries.CHUNK_STATUS.getKey(statuses.get(i)).getPath();
sb.append(String.format(" %-22s %8.1f ms (%6.2f ms/chunk)\n",
name, timings[i] / 1e6, timings[i] / 1e6 / totalChunks));
}
sb.append(String.format(" %-22s %8.1f ms (%6.2f ms/chunk)\n",
"TOTAL", total / 1e6, total / 1e6 / totalChunks));
return sb.toString();
}
private static class Context {
final ServerLevel level;
final ServerChunkCache chunkSource;
final ChunkPos center;
final int loadRadius;
final int loadDiameter;
final ChunkAccess[] realChunks;
final int neighborDiameter;
final int centerIndex;
final Executor executor;
final ChunkGenerator generator;
final ThreadedLevelLightEngine lightEngine;
final StructureTemplateManager templates;
final PoiManager poiManager;
final Function<ChunkAccess, CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>>> noopPromotion;
private final net.minecraft.core.Registry<Biome> biomeRegistry;
Context(ServerLevel level, ChunkPos center, int testRadius) {
this.level = level;
this.chunkSource = level.getChunkSource();
this.center = center;
this.loadRadius = testRadius + REQUIRED_LOAD_RADIUS;
this.loadDiameter = 2 * loadRadius + 1;
this.neighborDiameter = 2 * REQUIRED_LOAD_RADIUS + 1;
this.centerIndex = neighborDiameter * neighborDiameter / 2;
this.executor = MoreExecutors.directExecutor();
this.generator = chunkSource.getGenerator();
this.lightEngine = chunkSource.getLightEngine();
this.templates = level.getStructureManager();
this.poiManager = chunkSource.getPoiManager();
this.noopPromotion = chunk -> CompletableFuture.completedFuture(Either.left(chunk));
this.biomeRegistry = level.registryAccess().registryOrThrow(Registries.BIOME);
chunkSource.addRegionTicket(BENCHMARK_TICKET, center, loadRadius, Unit.INSTANCE);
realChunks = new ChunkAccess[loadDiameter * loadDiameter];
for (int dz = -loadRadius; dz <= loadRadius; dz++) {
for (int dx = -loadRadius; dx <= loadRadius; dx++) {
LevelChunk real = level.getChunk(center.x + dx, center.z + dz);
realChunks[(dz + loadRadius) * loadDiameter + (dx + loadRadius)] =
new ImposterProtoChunk(real, false);
}
}
}
ProtoChunk newProtoChunk(ChunkPos pos) {
return new ProtoChunk(pos, UpgradeData.EMPTY, level, biomeRegistry, null);
}
ChunkAccess[] buildNeighborArray(ChunkPos testPos) {
int count = neighborDiameter * neighborDiameter;
ChunkAccess[] array = new ChunkAccess[count];
int baseX = (testPos.x - REQUIRED_LOAD_RADIUS) - (center.x - loadRadius);
int baseZ = (testPos.z - REQUIRED_LOAD_RADIUS) - (center.z - loadRadius);
for (int dz = 0; dz < neighborDiameter; dz++) {
System.arraycopy(realChunks, (baseZ + dz) * loadDiameter + baseX,
array, dz * neighborDiameter, neighborDiameter);
}
return array;
}
void cleanup() {
chunkSource.removeRegionTicket(BENCHMARK_TICKET, center, loadRadius, Unit.INSTANCE);
}
}
}

View File

@ -1,116 +1,16 @@
package org.embeddedt.modernfix.blockstate;
import com.google.common.base.Stopwatch;
import com.google.common.collect.ImmutableSet;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.level.EmptyBlockGetter;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.loading.FMLLoader;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.core.config.ModernFixConfig;
import org.embeddedt.modernfix.util.BakeReason;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.embeddedt.modernfix.duck.IBlockState;
public class BlockStateCacheHandler {
private static final Set<String> PRECACHED_COLLISION_SHAPES = ImmutableSet.<String>builder()
.add("refinedstorage")
.add("cabletiers")
.add("extrastorage")
.build();
private static RebuildThread currentRebuildThread = null;
private static boolean needToBake() {
BakeReason reason = BakeReason.getCurrentBakeReason();
return !(reason == BakeReason.FREEZE /* startup */
|| reason == BakeReason.REVERT /* crash, in which case cache likely doesn't matter, or exiting world */
|| reason == BakeReason.REMOTE_SNAPSHOT_INJECT /* will be handled when tags are reloaded */
|| (reason == BakeReason.LOCAL_SNAPSHOT_INJECT && FMLLoader.getDist() == Dist.CLIENT /* will be handled when tags are reloaded */));
}
public static void rebuildParallel(boolean force) {
if(currentRebuildThread != null) {
if(currentRebuildThread.isAlive())
ModernFix.LOGGER.warn("Interrupting previous blockstate cache rebuild");
currentRebuildThread.stopRebuild();
try {
currentRebuildThread.join(10000);
if(currentRebuildThread.isAlive())
throw new IllegalStateException("Blockstate cache rebuild thread has hung");
} catch(InterruptedException e) {
throw new RuntimeException("Don't interrupt Minecraft threads", e);
}
ModernFix.LOGGER.debug("Rebuild thread exited");
currentRebuildThread = null;
}
if(force || needToBake()) {
ArrayList<BlockState> stateList = new ArrayList<>(Block.BLOCK_STATE_REGISTRY.size());
public static void invalidateCache() {
synchronized (BlockBehaviour.BlockStateBase.class) {
for (BlockState blockState : Block.BLOCK_STATE_REGISTRY) {
stateList.add(blockState);
((IBlockState)blockState).clearCache();
}
currentRebuildThread = new RebuildThread(stateList);
if(ModernFixConfig.REBUILD_BLOCKSTATES_ASYNC.get())
currentRebuildThread.start();
else {
currentRebuildThread.run();
currentRebuildThread = null;
}
} else {
ModernFix.LOGGER.warn("Deferred blockstate cache rebuild");
}
}
private static class RebuildThread extends Thread {
private boolean stopRebuild = false;
private final List<BlockState> blockStateList;
public RebuildThread(List<BlockState> statesToInit) {
this.setName("ModernFix blockstate cache rebuild thread");
this.setPriority(Thread.MIN_PRIORITY + 1);
this.blockStateList = statesToInit;
}
public void stopRebuild() {
this.stopRebuild = true;
}
private void rebuildCache() {
Iterator<BlockState> stateIterator = blockStateList.iterator();
while(!stopRebuild && stateIterator.hasNext()) {
stateIterator.next().initCache();
}
}
@Override
@SuppressWarnings("deprecation")
public void run() {
Stopwatch realtimeStopwatch = Stopwatch.createStarted();
/* Run some special sauce for Refined Storage since it has very slow collision shapes */
List<BlockState> specialStates = blockStateList.stream()
.filter(state -> PRECACHED_COLLISION_SHAPES.contains(state.getBlock().getRegistryName().getNamespace())).collect(Collectors.toList());
CompletableFuture.runAsync(() -> {
specialStates.parallelStream()
.forEach(state -> {
/* Force these blocks to compute their shapes ahead of time on worker threads */
state.getBlock().getCollisionShape(state, EmptyBlockGetter.INSTANCE, BlockPos.ZERO, CollisionContext.empty());
state.getBlock().getOcclusionShape(state, EmptyBlockGetter.INSTANCE, BlockPos.ZERO);
});
}, Util.backgroundExecutor()).join();
rebuildCache();
realtimeStopwatch.stop();
if(!stopRebuild)
ModernFix.LOGGER.info("Blockstate cache rebuilt in " + realtimeStopwatch.elapsed(TimeUnit.MILLISECONDS)/1000f + " seconds");
}
}
}

View File

@ -0,0 +1,162 @@
package org.embeddedt.modernfix.blockstate;
import com.google.common.collect.Iterators;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import net.minecraft.world.level.block.state.properties.Property;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
/**
* Fake "map" implementation used to hold the states.
*
* Intentionally throws on methods that would be inefficient so that we know
* if an incompatible mod is present.
*/
public class FakeStateMap<S> implements Map<Map<Property<?>, Comparable<?>>, S> {
private final Map<Property<?>, Comparable<?>>[] keys;
private Map<Map<Property<?>, Comparable<?>>, S> fastLookup;
private final Object[] values;
private int usedSlots;
public FakeStateMap(int numStates) {
this.keys = new Map[numStates];
this.values = new Object[numStates];
this.usedSlots = 0;
}
@Override
public int size() {
return usedSlots;
}
@Override
public boolean isEmpty() {
return size() == 0;
}
@Override
public boolean containsKey(Object o) {
return getFastLookup().containsKey(o);
}
@Override
public boolean containsValue(Object o) {
return getFastLookup().containsValue(o);
}
@SuppressWarnings("unchecked")
private Map<Map<Property<?>, Comparable<?>>, S> getFastLookup() {
if(fastLookup == null) {
var map = new Object2ObjectOpenHashMap<Map<Property<?>, Comparable<?>>, S>(usedSlots);
Map<Property<?>, Comparable<?>>[] keys = this.keys;
Object[] values = this.values;
for(int i = 0; i < usedSlots; i++) {
map.put(keys[i], (S)values[i]);
}
fastLookup = map;
}
return fastLookup;
}
@Override
public S get(Object o) {
return getFastLookup().get(o);
}
@Nullable
@Override
public S put(Map<Property<?>, Comparable<?>> propertyComparableMap, S s) {
if(fastLookup != null) {
throw new IllegalStateException("Cannot populate map after fast lookup is built");
}
keys[usedSlots] = propertyComparableMap;
values[usedSlots] = s;
usedSlots++;
return null;
}
@Override
public S remove(Object o) {
throw new UnsupportedOperationException();
}
@Override
public void putAll(@NotNull Map<? extends Map<Property<?>, Comparable<?>>, ? extends S> map) {
for(Entry<? extends Map<Property<?>, Comparable<?>>, ? extends S> entry : map.entrySet()) {
this.put(entry.getKey(), entry.getValue());
}
}
@Override
public void clear() {
for(int i = 0; i < usedSlots; i++) {
this.keys[i] = null;
this.values[i] = null;
}
this.usedSlots = 0;
}
private <T> List<T> asList(T... array) {
var list = Arrays.asList(array);
if(usedSlots < array.length) {
list = list.subList(0, usedSlots);
}
return list;
}
@NotNull
@Override
public Set<Map<Property<?>, Comparable<?>>> keySet() {
return new AbstractSet<>() {
@Override
public Iterator<Map<Property<?>, Comparable<?>>> iterator() {
return keys.length == usedSlots ? Iterators.forArray(keys) : asList(keys).iterator();
}
@Override
public int size() {
return usedSlots;
}
};
}
@NotNull
@Override
public Collection<S> values() {
return (Collection<S>)asList(values);
}
@NotNull
@Override
public Set<Entry<Map<Property<?>, Comparable<?>>, S>> entrySet() {
return new AbstractSet<>() {
@Override
public int size() {
return usedSlots;
}
@NotNull
@Override
public Iterator<Entry<Map<Property<?>, Comparable<?>>, S>> iterator() {
return new Iterator<>() {
int currentIdx = 0;
@Override
public boolean hasNext() {
return currentIdx < usedSlots;
}
@Override
public Entry<Map<Property<?>, Comparable<?>>, S> next() {
if (currentIdx >= usedSlots)
throw new IndexOutOfBoundsException();
Entry<Map<Property<?>, Comparable<?>>, S> entry = new AbstractMap.SimpleImmutableEntry<>(keys[currentIdx], (S) values[currentIdx]);
currentIdx++;
return entry;
}
};
}
};
}
}

View File

@ -0,0 +1,7 @@
package org.embeddedt.modernfix.chunk;
import net.minecraft.world.level.chunk.Palette;
public interface ExtendedPalettedContainer<T> {
Palette<T> mfix$getPalette();
}

View File

@ -0,0 +1,79 @@
package org.embeddedt.modernfix.command;
import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.packs.resources.Resource;
import net.minecraft.server.packs.resources.ResourceManager;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.duck.IProfilingServerFunctionManager;
import org.embeddedt.modernfix.structure.CachingStructureManager;
import java.io.InputStream;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static net.minecraft.commands.Commands.literal;
public class ModernFixCommands {
public static void register(CommandDispatcher<CommandSourceStack> dispatcher) {
dispatcher.register(literal("modernfix")
.then(literal("upgradeStructures")
.requires(source -> source.hasPermission(3))
.executes(context -> {
ServerLevel level = context.getSource().getLevel();
if(level == null) {
context.getSource().sendFailure(Component.literal("Couldn't find server level"));
return 0;
}
ResourceManager manager = level.getServer().resources.resourceManager();
Map<ResourceLocation, Resource> structures = manager.listResources("structures", p -> p.getPath().endsWith(".nbt"));
int upgradedNum = 0;
Pattern pathPattern = Pattern.compile("^structures/(.*)\\.nbt$");
for(Map.Entry<ResourceLocation, Resource> entry : structures.entrySet()) {
upgradedNum++;
ResourceLocation found = entry.getKey();
Matcher matcher = pathPattern.matcher(found.getPath());
if(!matcher.matches())
continue;
ResourceLocation structureLocation = new ResourceLocation(found.getNamespace(), matcher.group(1));
try(InputStream resource = entry.getValue().open()) {
CachingStructureManager.readStructureTag(structureLocation, level.getServer().getFixerUpper(), resource);
Component msg = Component.literal("checked " + structureLocation + " (" + upgradedNum + "/" + structures.size() + ")");
context.getSource().sendSuccess(() -> msg, false);
} catch(Throwable e) {
ModernFix.LOGGER.error("Couldn't upgrade structure " + found, e);
context.getSource().sendFailure(Component.literal("error reading " + structureLocation + " (" + upgradedNum + "/" + structures.size() + ")"));
}
}
context.getSource().sendSuccess(() -> Component.literal("All structures upgraded"), false);
return 1;
}))
.then(literal("mcfunctions").requires(source -> source.hasPermission(3))
.executes(context -> {
ServerLevel level = context.getSource().getLevel();
if(level == null) {
context.getSource().sendFailure(Component.literal("Couldn't find server level"));
return 0;
}
if (level.getServer().getFunctions() instanceof IProfilingServerFunctionManager profiler) {
context.getSource().sendSuccess(() -> Component.literal("mcfunction runtime breakdown:"), false);
for(String line : profiler.mfix$getProfilingResults().split("\n")) {
context.getSource().sendSuccess(() -> Component.literal(line), false);
}
return 1;
} else {
context.getSource().sendFailure(Component.literal("ModernFix mcfunction profiling is not enabled on this server."));
return 0;
}
}))
);
}
}

View File

@ -0,0 +1,56 @@
package org.embeddedt.modernfix.common.mixin.bugfix.buffer_builder_leak;
import com.mojang.blaze3d.vertex.BufferBuilder;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.render.UnsafeBufferHelper;
import org.spongepowered.asm.mixin.Dynamic;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.nio.ByteBuffer;
@Mixin(value = BufferBuilder.class, priority = 1500)
@ClientOnlyMixin
public class BufferBuilderMixin {
@Shadow private ByteBuffer buffer;
private static boolean leakReported = false;
private boolean mfix$shouldFree = true;
@Dynamic
@Inject(method = "flywheel$injectForRender", at = @At("RETURN"), remap = false, require = 0)
private void preventFree(CallbackInfo ci) {
mfix$shouldFree = false;
}
/**
* Ensure UnsafeBufferHelper is classloaded early, to avoid Forge's event transformer showing an error in the log.
*/
@Inject(method = "<clinit>", at = @At(value = "RETURN"))
private static void initUnsafeBufferHelper(CallbackInfo ci) {
UnsafeBufferHelper.init();
}
@Override
protected void finalize() throws Throwable {
try {
ByteBuffer buf = buffer;
// can be null if a mod already tried to free the buffer
if(buf != null && mfix$shouldFree) {
if(!leakReported) {
leakReported = true;
ModernFix.LOGGER.warn("One or more BufferBuilders have been leaked, ModernFix will attempt to correct this.");
}
UnsafeBufferHelper.free(buf);
buffer = null;
}
} finally {
super.finalize();
}
}
}

View File

@ -0,0 +1,27 @@
package org.embeddedt.modernfix.common.mixin.bugfix.buffer_builder_leak;
import com.mojang.blaze3d.vertex.BufferBuilder;
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
import net.minecraft.client.renderer.RenderBuffers;
import net.minecraft.client.renderer.RenderType;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(RenderBuffers.class)
@ClientOnlyMixin
public class RenderBuffersMixin {
/**
* @author embeddedt
* @reason put() may be called for multiple instances of the same render type (e.g. signSheet and hangingSignSheet
* in 1.20.1). This leaks the previous BufferBuilder if one is already in the map.
*/
@Inject(method = "put", at = @At("HEAD"), cancellable = true)
private static void mfix$preventBufferLeak(Object2ObjectLinkedOpenHashMap<RenderType, BufferBuilder> mapBuilders, RenderType renderType, CallbackInfo ci) {
if (mapBuilders.containsKey(renderType)) {
ci.cancel();
}
}
}

View File

@ -0,0 +1,163 @@
package org.embeddedt.modernfix.common.mixin.bugfix.chunk_deadlock;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.datafixers.util.Either;
import net.minecraft.CrashReport;
import net.minecraft.ReportedException;
import net.minecraft.server.level.ChunkHolder;
import net.minecraft.server.level.ChunkMap;
import net.minecraft.util.thread.BlockableEventLoop;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
import org.embeddedt.modernfix.ModernFix;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.lang.reflect.Field;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
import java.util.function.Function;
@Mixin(ChunkMap.class)
public abstract class ChunkMapLoadMixin {
@Shadow
@Nullable
protected abstract ChunkHolder getVisibleChunkIfPresent(long l);
@Shadow
@Final
private BlockableEventLoop<Runnable> mainThreadExecutor;
@Unique
private static final ThreadLocal<CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>>> MFIX_SURROGATE_FUTURE = new ThreadLocal<>();
@Unique
private final ConcurrentLinkedQueue<Throwable> mfix$promotionExceptions = new ConcurrentLinkedQueue<>();
/**
* @author embeddedt
* @reason This redirect makes several changes to how full chunk promotion works. First of all, promotion runs
* directly in the context of the main thread executor, rather than going through the priority sorter.
* This change allows attempts to load other chunks from within the promotion lambda to succeed (important
* for bad EntityJoinLevelEvent implementations to not deadlock the game). Second, it slightly alters the
* semantics of protoChunkToFullChunk so that the FULL chunk future will be completed before postload
* callbacks finish running. This change allows attempts to load the _same_ chunk in the promotion lambda to
* succeed, as otherwise the future would block waiting for itself to complete.
*
* <p>This is a cleaner version of a similar trick used in ModernFix versions for 1.16, which deferred specifically
* entity addition to happen outside the futures.
*/
@Redirect(method = "protoChunkToFullChunk", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", ordinal = 0))
private CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> createSurrogateFuture(
CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> previousFuture,
Function<? super Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>, ? extends Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> fn,
Executor executor) {
var surrogate = new CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>>();
// Unlike vanilla, we execute the promotion lambda in mainThreadExecutor, rather than within the context
// of the task sorter. Doing this avoids deadlocking the sorter if a blocking chunk load is attempted
// during chunk promotion. We still initially compose the future through the sorter's executor to stop promotion
// from running earlier than it would in vanilla.
previousFuture.thenComposeAsync(CompletableFuture::completedFuture, executor).thenApplyAsync(either -> {
// running on thread that executes lambda body
MFIX_SURROGATE_FUTURE.set(surrogate);
try {
return fn.apply(either);
} finally {
MFIX_SURROGATE_FUTURE.remove();
}
}, this.mainThreadExecutor).whenComplete((either, throwable) -> {
if (throwable != null) {
if (!surrogate.isDone()) {
surrogate.completeExceptionally(throwable);
} else {
// The chunk has already become visible at FULL status, so we
// track the exception ourselves and manually rethrow it at the right point
// to trigger a server crash
this.mfix$promotionExceptions.add(throwable);
}
} else {
surrogate.complete(either);
}
});
// Return the surrogate
return surrogate;
}
/**
* @author embeddedt
* @reason Complete the surrogate future as soon as basic promotion is done, and before we start loading entities
* & block entities. This allows EntityJoinLevelEvent to read the current chunk.
*/
@Inject(method = "lambda$protoChunkToFullChunk$34", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/chunk/LevelChunk;runPostLoad()V"))
private void completeSurrogateFuture(ChunkHolder holder, ChunkAccess p_214856_, CallbackInfoReturnable<ChunkAccess> cir,
@Local(ordinal = 0) LevelChunk levelChunk) {
var future = MFIX_SURROGATE_FUTURE.get();
if (future != null) {
future.complete(Either.left(levelChunk));
}
}
@Inject(method = "tick()V", at = @At("HEAD"))
private void reportDeferredPromotionException(CallbackInfo ci) {
var throwable = this.mfix$promotionExceptions.poll();
if (throwable == null) {
return;
}
if (throwable instanceof ReportedException e) {
throw e;
} else {
throw new ReportedException(CrashReport.forThrowable(throwable, "Exception during promotion of chunk to FULL status"));
}
}
// we also preserve the legacy currentlyLoading field to keep Forge parity
private static final Field currentlyLoadingField = ObfuscationReflectionHelper.findField(ChunkHolder.class, "currentlyLoading");
private static void setCurrentlyLoading(ChunkHolder holder, LevelChunk value) {
try {
currentlyLoadingField.set(holder, value);
} catch(ReflectiveOperationException e) {
e.printStackTrace();
}
}
/**
* Set currentlyLoading before calling runPostLoad and restore its old value afterwards. We track the old value
* to avoid conflicting with Forge if/when this feature is added.
*/
@WrapOperation(method = "lambda$protoChunkToFullChunk$34", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/chunk/LevelChunk;runPostLoad()V"))
private void setCurrentLoadingThenPostLoad(LevelChunk chunk, Operation<Void> operation) {
ChunkHolder holder = this.getVisibleChunkIfPresent(chunk.getPos().toLong());
if(holder != null) {
LevelChunk prevLoading = null;
try {
prevLoading = (LevelChunk)currentlyLoadingField.get(holder);
} catch(ReflectiveOperationException e) {
e.printStackTrace();
}
try {
setCurrentlyLoading(holder, chunk);
operation.call(chunk);
} finally {
setCurrentlyLoading(holder, prevLoading);
}
} else {
ModernFix.LOGGER.warn("Unable to find chunk holder for loading chunk");
operation.call(chunk);
}
}
}

View File

@ -0,0 +1,30 @@
package org.embeddedt.modernfix.common.mixin.bugfix.chunk_deadlock;
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.gameevent.GameEvent;
import org.embeddedt.modernfix.ModernFix;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(Entity.class)
public class EntityMixin {
/**
* @author embeddedt
* @reason When an entity is added to the world via the worldgen load path (ChunkMap#postLoadProtoChunk calling
* ServerLevel#addWorldGenChunkEntities), attempts to add a passenger result in a deadlock when the sculk event
* tries to raytrace blocks. To fix this, we skip firing the sculk event if the chunk the entity is within is not
* loaded.
*/
@WrapWithCondition(method = "addPassenger", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;gameEvent(Lnet/minecraft/world/level/gameevent/GameEvent;Lnet/minecraft/world/entity/Entity;)V"))
private boolean onlyAddIfSelfChunkLoaded(Entity instance, GameEvent event, Entity entity) {
var chunkPos = instance.chunkPosition();
if (instance.level() instanceof ServerLevel serverLevel && serverLevel.getChunkSource().getChunkNow(chunkPos.x, chunkPos.z) == null) {
ModernFix.LOGGER.warn("Skipped emitting ENTITY_MOUNT game event for entity {} as it would cause deadlock", instance.toString());
return false;
} else {
return true;
}
}
}

View File

@ -0,0 +1,57 @@
package org.embeddedt.modernfix.common.mixin.bugfix.chunk_deadlock;
import net.minecraft.server.level.ChunkHolder;
import net.minecraft.server.level.ServerChunkCache;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkStatus;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
@Mixin(value = ServerChunkCache.class, priority = 1100)
public abstract class ServerChunkCache_CurrentLoadingMixin {
@Shadow @Nullable protected abstract ChunkHolder getVisibleChunkIfPresent(long l);
private static final MethodHandle CURRENTLY_LOADING;
static {
try {
Field currentlyLoadingField = ObfuscationReflectionHelper.findField(ChunkHolder.class, "currentlyLoading");
currentlyLoadingField.setAccessible(true);
CURRENTLY_LOADING = MethodHandles.lookup().unreflectGetter(currentlyLoadingField);
} catch(Exception e) {
throw new RuntimeException("Failed to get currentlyLoading field", e);
}
}
/**
* Check the currentlyLoading field before going to the future chain, as was done in 1.16. In 1.18 upstream seems
* to have only applied this to getChunkNow().
*/
@Inject(method = "getChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerChunkCache;getChunkFutureMainThread(IILnet/minecraft/world/level/chunk/ChunkStatus;Z)Ljava/util/concurrent/CompletableFuture;"), cancellable = true, require = 0)
private void checkCurrentlyLoading(int chunkX, int chunkZ, ChunkStatus requiredStatus, boolean load, CallbackInfoReturnable<ChunkAccess> cir) {
long i = ChunkPos.asLong(chunkX, chunkZ);
ChunkHolder holder = this.getVisibleChunkIfPresent(i);
if(holder != null) {
LevelChunk c;
try {
c = (LevelChunk)CURRENTLY_LOADING.invokeExact(holder);
} catch(Throwable e) {
e.printStackTrace();
c = null;
}
if(c != null)
cir.setReturnValue(c);
}
}
}

View File

@ -0,0 +1,55 @@
package org.embeddedt.modernfix.common.mixin.bugfix.cofh_core_crash;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Coerce;
import org.spongepowered.asm.mixin.injection.Redirect;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Method;
/**
* Fix getOrCreateFlag accessing the FLAGS map without synchronization by wrapping all calls to it
* in a synchronized block.
*/
@Pseudo
@Mixin(targets = { "cofh/lib/util/flags/FlagManager" }, remap = false)
@RequiresMod("cofh_core")
public class FlagManagerMixin {
@Shadow @Final
private static Object2ObjectOpenHashMap<String, ?> FLAGS;
@Unique
private static final MethodHandle mfix$getOrCreateFlag;
static {
// use this reflection dance to avoid depending on whether it's implemented via BooleanSupplier or Supplier<Boolean>
try {
Method m = MethodHandles.lookup().lookupClass().getDeclaredMethod("getOrCreateFlag", String.class);
m.setAccessible(true);
mfix$getOrCreateFlag = MethodHandles.lookup().unreflect(m);
} catch(ReflectiveOperationException e) {
throw new AssertionError(e);
}
}
@Redirect(method = "*", at = @At(value = "INVOKE", target = "getOrCreateFlag"), require = 0)
@Coerce
private Object getFlag(@Coerce Object flagHandler, String flag) {
if(flagHandler != this)
throw new AssertionError("Redirect targeted bad getOrCreateFlag invocation");
synchronized (FLAGS) {
try {
return mfix$getOrCreateFlag.invoke((Object)this, flag);
} catch(Throwable e) {
if(e instanceof RuntimeException)
throw (RuntimeException)e;
else
throw new RuntimeException(e);
}
}
}
}

View File

@ -0,0 +1,31 @@
package org.embeddedt.modernfix.common.mixin.bugfix.concurrency;
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import net.minecraft.tags.TagKey;
import net.minecraftforge.registries.tags.ITag;
import org.jetbrains.annotations.NotNull;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import java.util.Map;
@Mixin(targets = {"net/minecraftforge/registries/ForgeRegistryTagManager"})
public class ForgeRegistryTagManagerMixin<V> {
@Shadow private volatile Map<TagKey<V>, ITag<V>> tags;
/**
* @author embeddedt (issue found by Uncandango)
* @reason vanilla does not use the correct double-checked locking paradigm, which leads to race conditions
*/
@WrapMethod(method = "getTag", remap = false)
private ITag<V> getTagSafe(@NotNull TagKey<V> name, Operation<ITag<V>> original) {
ITag<V> tag = this.tags.get(name);
if (tag == null) {
synchronized (this) {
tag = original.call(name);
}
}
return tag;
}
}

View File

@ -0,0 +1,40 @@
package org.embeddedt.modernfix.common.mixin.bugfix.concurrency;
import net.minecraft.core.HolderSet;
import net.minecraft.core.MappedRegistry;
import net.minecraft.tags.TagKey;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import java.util.IdentityHashMap;
import java.util.Map;
@Mixin(value = MappedRegistry.class, priority = 500)
public abstract class MappedRegistryMixin<T> {
@Shadow private volatile Map<TagKey<T>, HolderSet.Named<T>> tags;
@Shadow protected abstract HolderSet.Named<T> createTag(TagKey<T> key);
/**
* @author embeddedt (issue found by Uncandango)
* @reason vanilla does not use the correct double-checked locking paradigm, which leads to race conditions
*/
@Overwrite
public HolderSet.Named<T> getOrCreateTag(TagKey<T> key) {
HolderSet.Named<T> named = this.tags.get(key);
if (named == null) {
// synchronize and check again - this is the bugfix
synchronized (this) {
named = this.tags.get(key);
if (named == null) {
named = this.createTag(key);
Map<TagKey<T>, HolderSet.Named<T>> map = new IdentityHashMap<>(this.tags);
map.put(key, named);
this.tags = map;
}
}
}
return named;
}
}

View File

@ -0,0 +1,39 @@
package org.embeddedt.modernfix.common.mixin.bugfix.concurrency;
import net.minecraft.core.HolderSet;
import net.minecraft.tags.TagKey;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import java.util.IdentityHashMap;
import java.util.Map;
@Mixin(targets = {"net/minecraftforge/registries/NamespacedWrapper"}, priority = 500)
public abstract class NamespacedWrapperMixin<T> {
@Shadow(aliases = {"tags"}) private volatile Map<TagKey<T>, HolderSet.Named<T>> tags;
@Shadow(aliases = {"createTag"}) protected abstract HolderSet.Named<T> m_211067_(TagKey<T> key);
/**
* @author embeddedt (issue found by Uncandango)
* @reason vanilla does not use the correct double-checked locking paradigm, which leads to race conditions
*/
@Overwrite
public HolderSet.Named<T> getOrCreateTag(TagKey<T> key) {
HolderSet.Named<T> named = this.tags.get(key);
if (named == null) {
// synchronize and check again - this is the bugfix
synchronized (this) {
named = this.tags.get(key);
if (named == null) {
named = this.m_211067_(key);
Map<TagKey<T>, HolderSet.Named<T>> map = new IdentityHashMap<>(this.tags);
map.put(key, named);
this.tags = map;
}
}
}
return named;
}
}

View File

@ -0,0 +1,49 @@
package org.embeddedt.modernfix.common.mixin.bugfix.concurrency;
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import net.minecraft.client.Minecraft;
import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.resources.PreparableReloadListener;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.ModLoadingStage;
import net.minecraftforge.registries.ForgeRegistries;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.forge.init.ModernFixForge;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(ReloadableResourceManager.class)
@ClientOnlyMixin
public abstract class ReloadableResourceManagerMixin {
@Shadow
@Final
private PackType type;
@Shadow
public abstract void registerReloadListener(PreparableReloadListener listener);
/**
* @author embeddedt
* @reason complain loudly when reload listeners are being registered too late in a way that would cause
* concurrency issues, and prevent them from crashing the game
*/
@WrapMethod(method = "registerReloadListener")
private void checkCallingThread(PreparableReloadListener listener, Operation<Void> original) {
if (ModernFixForge.registryEventsFired && this.type == PackType.CLIENT_RESOURCES
&& (Object)this == Minecraft.getInstance().getResourceManager()
&& !Minecraft.getInstance().isSameThread()) {
ModernFix.LOGGER.error("A mod is calling registerReloadListener at the wrong time. This will cause random concurrency crashes when ModernFix is not installed. Please report this to them. If you are a modder, refer to https://github.com/embeddedt/ModernFix/wiki/registerReloadListener-called-on-wrong-thread for more information.", new Exception("registerReloadListener called on wrong thread"));
// Defer the call onto the main client thread. There is a decent chance the mod's listener will be
// ignored in this case, but it is more predictable than allowing them to randomly crash the game.
Minecraft.getInstance().tell(() -> this.registerReloadListener(listener));
return;
}
original.call(listener);
}
}

View File

@ -0,0 +1,35 @@
package org.embeddedt.modernfix.common.mixin.bugfix.ctm_resourceutil_cme;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import team.chisel.ctm.client.util.ResourceUtil;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ConcurrentMap;
@Mixin(ResourceUtil.class)
@RequiresMod("ctm")
@ClientOnlyMixin
@SuppressWarnings({"rawtypes", "unchecked"})
public class ResourceUtilMixin {
@Shadow(remap = false) @Final @Mutable
private static Map metadataCache;
/**
* @author embeddedt
* @reason quick fix to prevent rare CMEs
*/
@Inject(method = "<clinit>", at = @At("RETURN"))
private static void synchronizeMetadataCache(CallbackInfo ci) {
if(!(metadataCache instanceof ConcurrentMap))
metadataCache = Collections.synchronizedMap(metadataCache);
}
}

View File

@ -0,0 +1,24 @@
package org.embeddedt.modernfix.common.mixin.bugfix.ender_dragon_leak;
import net.minecraft.client.renderer.entity.EnderDragonRenderer;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(EnderDragonRenderer.class)
@ClientOnlyMixin
public abstract class EnderDragonRendererMixin {
@Shadow @Final private EnderDragonRenderer.DragonModel model;
/**
* Prevent leaking the client world through the entity reference.
*/
@Inject(method = "render(Lnet/minecraft/world/entity/boss/enderdragon/EnderDragon;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At("RETURN"))
private void clearDragonEntityReference(CallbackInfo ci) {
this.model.entity = null;
}
}

View File

@ -0,0 +1,30 @@
package org.embeddedt.modernfix.common.mixin.bugfix.entity_pose_stack;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.IEventBus;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(LivingEntityRenderer.class)
@ClientOnlyMixin
public class LivingEntityRendererMixin {
@Redirect(method = "render(Lnet/minecraft/world/entity/LivingEntity;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/eventbus/api/IEventBus;post(Lnet/minecraftforge/eventbus/api/Event;)Z", ordinal = 0))
private boolean fireCheckingPoseStack(IEventBus instance, Event event) {
PoseStack stack = ((RenderLivingEvent)event).getPoseStack();
int size = ((PoseStackAccessor)stack).getPoseStack().size();
if (instance.post(event)) {
// Pop the stack if someone pushed it in the event
while (((PoseStackAccessor)stack).getPoseStack().size() > size) {
stack.popPose();
}
return true;
} else {
return false;
}
}
}

View File

@ -0,0 +1,30 @@
package org.embeddedt.modernfix.common.mixin.bugfix.entity_pose_stack;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.IEventBus;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(PlayerRenderer.class)
@ClientOnlyMixin
public class PlayerRendererMixin {
@Redirect(method = "render(Lnet/minecraft/client/player/AbstractClientPlayer;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/eventbus/api/IEventBus;post(Lnet/minecraftforge/eventbus/api/Event;)Z", ordinal = 0))
private boolean fireCheckingPoseStack(IEventBus instance, Event event) {
PoseStack stack = ((RenderPlayerEvent)event).getPoseStack();
int size = ((PoseStackAccessor)stack).getPoseStack().size();
if (instance.post(event)) {
// Pop the stack if someone pushed it in the event
while (((PoseStackAccessor)stack).getPoseStack().size() > size) {
stack.popPose();
}
return true;
} else {
return false;
}
}
}

View File

@ -0,0 +1,15 @@
package org.embeddedt.modernfix.common.mixin.bugfix.entity_pose_stack;
import com.mojang.blaze3d.vertex.PoseStack;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Deque;
@Mixin(PoseStack.class)
@ClientOnlyMixin
public interface PoseStackAccessor {
@Accessor
Deque<PoseStack.Pose> getPoseStack();
}

View File

@ -0,0 +1,26 @@
package org.embeddedt.modernfix.common.mixin.bugfix.extra_experimental_screen;
import com.mojang.serialization.Lifecycle;
import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen;
import net.minecraft.world.level.storage.PrimaryLevelData;
import net.minecraft.world.level.storage.WorldData;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(CreateWorldScreen.class)
@ClientOnlyMixin
public class CreateWorldScreenMixin {
/**
* Fix experimental world dialog still being shown the first time you reopen a world that was created
* as experimental.
*/
@ModifyArg(method = "createNewWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/WorldOpenFlows;createLevelFromExistingSettings(Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/server/ReloadableServerResources;Lnet/minecraft/core/LayeredRegistryAccess;Lnet/minecraft/world/level/storage/WorldData;)V"), index = 3)
private WorldData setExperimentalFlag(WorldData data) {
if(data instanceof PrimaryLevelData pld && data.worldGenSettingsLifecycle() != Lifecycle.stable()) {
pld.withConfirmedWarning(true);
}
return data;
}
}

View File

@ -0,0 +1,36 @@
package org.embeddedt.modernfix.common.mixin.bugfix.forge_vehicle_packets;
import net.minecraft.network.protocol.game.ServerboundMoveVehiclePacket;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.world.phys.Vec3;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(ServerGamePacketListenerImpl.class)
public class ServerGamePacketListenerImplMixin {
@Shadow public ServerPlayer player;
@Redirect(method = "handleMoveVehicle", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerPlayer;absMoveTo(DDDFF)V"), require = 0)
private void movePlayerUsingPositionRider(ServerPlayer player, double x, double y, double z, float yRot, float xRot, ServerboundMoveVehiclePacket packet) {
if(player == this.player) {
// use positionRider
Vec3 oldPos = this.player.position();
yRot = this.player.getYRot();
xRot = this.player.getXRot();
float yHeadRot = this.player.getYHeadRot();
this.player.getRootVehicle().positionRider(this.player);
// keep old rotation
this.player.setYRot(yRot);
this.player.setXRot(xRot);
this.player.setYHeadRot(yHeadRot);
// save old position
this.player.xo = oldPos.x;
this.player.yo = oldPos.y;
this.player.zo = oldPos.z;
} else
player.absMoveTo(x, y, z, yRot, xRot);
}
}

View File

@ -0,0 +1,95 @@
package org.embeddedt.modernfix.common.mixin.bugfix.missing_block_entities;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelHeightAccessor;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.chunk.LevelChunkSection;
import net.minecraft.world.level.chunk.UpgradeData;
import net.minecraft.world.level.levelgen.blending.BlendingData;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
/**
* Hypixel (and possibly other buggy servers) send chunks to the client that are missing some block entity data, which
* causes these entities to be invisible. We "fix" this by recreating the block entity on the client with default data,
* which is hopefully what the legacy server also expects.
*/
@Mixin(LevelChunk.class)
@ClientOnlyMixin
public abstract class LevelChunkMixin extends ChunkAccess {
@Shadow @Final private Level level;
@Shadow @Nullable public abstract BlockEntity getBlockEntity(BlockPos pos, LevelChunk.EntityCreationType creationType);
public LevelChunkMixin(ChunkPos chunkPos, UpgradeData upgradeData, LevelHeightAccessor levelHeightAccessor, Registry<Biome> biomeRegistry, long inhabitedTime, @Nullable LevelChunkSection[] sections, @Nullable BlendingData blendingData) {
super(chunkPos, upgradeData, levelHeightAccessor, biomeRegistry, inhabitedTime, sections, blendingData);
}
@Inject(method = "replaceWithPacketData", at = @At("RETURN"))
private void validateBlockEntitiesInChunk(CallbackInfo ci) {
// No reason to check in singleplayer or on the integrated server
if (this.level.isClientSide && !Minecraft.getInstance().isLocalServer()) {
for (int i = 0; i < this.sections.length; i++) {
var section = this.sections[i];
try {
if (!section.hasOnlyAir() && section.maybeHas(BlockBehaviour.BlockStateBase::hasBlockEntity)) {
scanSectionForBlockEntities(section, i);
}
} catch(Exception e) {
ModernFix.LOGGER.error("Exception validating data in chunk", e);
return;
}
}
}
}
@Unique
private void scanSectionForBlockEntities(LevelChunkSection section, int i) {
int chunkXOff = this.chunkPos.x * 16;
int chunkZOff = this.chunkPos.z * 16;
BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos();
int sectionYOff = this.getSectionYFromSectionIndex(i) * 16;
for (int y = 0; y < 16; y++) {
for (int z = 0; z < 16; z++) {
for (int x = 0; x < 16; x++) {
var state = section.getBlockState(x, y, z);
if (state.hasBlockEntity()) {
cursor.set(chunkXOff + x, sectionYOff + y, chunkZOff + z);
makeBlockEntityIfNotExists(state, cursor);
}
}
}
}
}
@Unique
private void makeBlockEntityIfNotExists(BlockState state, BlockPos.MutableBlockPos pos) {
if (this.blockEntities.containsKey(pos) || this.pendingBlockEntities.containsKey(pos)) {
return;
}
BlockEntity blockEntity = this.getBlockEntity(pos.immutable(), LevelChunk.EntityCreationType.IMMEDIATE);
if (blockEntity != null && ModernFix.LOGGER.isDebugEnabled()) {
String blockName = state.getBlock().toString();
ModernFix.LOGGER.debug("Created missing block entity for {} at {}", blockName, pos.toShortString());
}
}
}

View File

@ -0,0 +1,55 @@
package org.embeddedt.modernfix.common.mixin.bugfix.model_data_manager_cme;
import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.ChunkPos;
import net.minecraftforge.client.model.data.ModelDataManager;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.Redirect;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
/**
* Fix several concurrency issues in the default ModelDataManager.
*/
@Mixin(ModelDataManager.class)
@ClientOnlyMixin
public abstract class ModelDataManagerMixin {
@Shadow protected abstract void refreshAt(ChunkPos chunk);
@Shadow @Final private Map<ChunkPos, Set<BlockPos>> needModelDataRefresh;
/**
* Make the set of positions to refresh a real concurrent hash set rather than relying on synchronizedSet,
* because the returned iterator won't be thread-safe otherwise. See https://github.com/AppliedEnergistics/Applied-Energistics-2/issues/7511
*/
@ModifyArg(method = "requestRefresh", at = @At(value = "INVOKE", target = "Ljava/util/Map;computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;", ordinal = 0), index = 1, remap = false)
private Function<ChunkPos, Set<BlockPos>> changeTypeOfSetUsed(Function<ChunkPos, Set<BlockPos>> mappingFunction) {
return pos -> ConcurrentHashMap.newKeySet();
}
@Redirect(method = "getAt(Lnet/minecraft/world/level/ChunkPos;)Ljava/util/Map;", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/client/model/data/ModelDataManager;refreshAt(Lnet/minecraft/world/level/ChunkPos;)V"), remap = false)
private void onlyRefreshOnMainThread(ModelDataManager instance, ChunkPos pos) {
// Only refresh model data on the main thread. This prevents calling getBlockEntity from worker threads
// which could cause weird CMEs or other behavior.
// Avoid the loop if no model data needs to be refreshed, to prevent unnecessary allocation.
if(Minecraft.getInstance().isSameThread() && !needModelDataRefresh.isEmpty()) {
// Refresh the given chunk, and all its neighbors. This is less efficient than the default code
// but we have no choice since we need to not do refreshing on workers, and blocks might
// try to access model data in neighboring chunks.
for(int x = -1; x <= 1; x++) {
for(int z = -1; z <= 1; z++) {
refreshAt(new ChunkPos(pos.x + x, pos.z + z));
}
}
}
}
}

View File

@ -0,0 +1,52 @@
package org.embeddedt.modernfix.common.mixin.bugfix.paper_chunk_patches;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.datafixers.util.Either;
import net.minecraft.server.level.*;
import net.minecraft.util.thread.BlockableEventLoop;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkStatus;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
@Mixin(ChunkMap.class)
public abstract class ChunkMapMixin {
@Shadow @Final private BlockableEventLoop<Runnable> mainThreadExecutor;
/* https://github.com/PaperMC/Paper/blob/ver/1.17.1/patches/server/0752-Fix-chunks-refusing-to-unload-at-low-TPS.patch */
@ModifyArg(method = "prepareAccessibleChunk", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"), index = 1)
private Executor useMainThreadExecutor(Executor executor) {
return this.mainThreadExecutor;
}
/**
* @author embeddedt
* @reason 1.17+ uses getNow to check if the parent future is ready, and calls scheduleChunkGeneration as soon as
* it is found to not be ready. In the latter scenario, a massive number of extra CompletableFutures are allocated
* even if they are not actually necessary if the future is waited for. To prevent this, if the parent future
* is not done, we wait for it to complete and then retry schedule(). This will either detect an adequate
* status and return a loading future, or re-enter this injector with the parent future completed, in which case
* we proceed to schedule generation as originally requested.
*/
@WrapOperation(method = "schedule", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ChunkMap;scheduleChunkGeneration(Lnet/minecraft/server/level/ChunkHolder;Lnet/minecraft/world/level/chunk/ChunkStatus;)Ljava/util/concurrent/CompletableFuture;"))
private CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> mfix$avoidSchedulingGenerationPrematurely(ChunkMap map, ChunkHolder holder, ChunkStatus status, Operation<CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>>> original) {
if (!status.hasLoadDependencies()) {
var parentFuture = holder.getOrScheduleFuture(status.getParent(), map);
if (!parentFuture.isDone()) {
return parentFuture.thenComposeAsync(
either -> map.schedule(holder, status),
this.mainThreadExecutor
);
}
}
return original.call(map, holder, status);
}
}

View File

@ -0,0 +1,53 @@
package org.embeddedt.modernfix.common.mixin.bugfix.paper_chunk_patches;
import net.minecraft.util.SortedArraySet;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import java.util.AbstractSet;
import java.util.Arrays;
import java.util.function.Predicate;
@Mixin(SortedArraySet.class)
@RequiresMod("!moonrise")
public abstract class SortedArraySetMixin<T> extends AbstractSet<T> {
@Shadow private int size;
@Shadow private T[] contents;
// Paper start - optimise removeIf
@Override
public boolean removeIf(Predicate<? super T> filter) {
// prev. impl used an iterator, which could be n^2 and creates garbage
int i = 0, len = this.size;
T[] backingArray = this.contents;
for (;;) {
if (i >= len) {
return false;
}
if (!filter.test(backingArray[i])) {
++i;
continue;
}
break;
}
// we only want to write back to backingArray if we really need to
int lastIndex = i; // this is where new elements are shifted to
for (; i < len; ++i) {
T curr = backingArray[i];
if (!filter.test(curr)) { // if test throws we're screwed
backingArray[lastIndex++] = curr;
}
}
// cleanup end
Arrays.fill(backingArray, lastIndex, len, null);
this.size = lastIndex;
return true;
}
}

View File

@ -0,0 +1,47 @@
package org.embeddedt.modernfix.common.mixin.bugfix.recipe_book_type_desync;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.stats.RecipeBookSettings;
import net.minecraft.world.inventory.RecipeBookType;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.embeddedt.modernfix.forge.packet.NetworkUtils;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@Mixin(RecipeBookSettings.class)
@ClientOnlyMixin
public class RecipeBookSettingsMixin {
private static int mfix$maxVanillaOrdinal;
static {
int ord = 0;
for(Field f : RecipeBookType.class.getDeclaredFields()) {
if(RecipeBookType.class.isAssignableFrom(f.getType()) && Modifier.isStatic(f.getModifiers()) && Modifier.isPublic(f.getModifiers())) {
try {
f.setAccessible(true);
RecipeBookType type = (RecipeBookType)f.get(null);
ord = Math.max(type.ordinal(), ord);
} catch(Exception e) {
e.printStackTrace();
ord = Integer.MAX_VALUE - 1;
break;
}
}
}
mfix$maxVanillaOrdinal = ord;
}
@Redirect(method = "read(Lnet/minecraft/network/FriendlyByteBuf;)Lnet/minecraft/stats/RecipeBookSettings;", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/FriendlyByteBuf;readBoolean()Z"))
private static boolean useDefaultBooleanIfVanilla(FriendlyByteBuf buf, @Local(ordinal = 0) RecipeBookType type) {
if(type.ordinal() >= (mfix$maxVanillaOrdinal + 1) && NetworkUtils.isCurrentlyVanilla) {
ModernFix.LOGGER.warn("Not reading recipe book data for type '{}' as we are using vanilla connection", type.name());
return false; // skip actually reading buffer
}
return buf.readBoolean();
}
}

View File

@ -0,0 +1,27 @@
package org.embeddedt.modernfix.common.mixin.bugfix.registry_ops_cme;
import net.minecraft.core.Registry;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceKey;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
@Mixin(targets = {"net/minecraft/resources/RegistryOps$1"})
public class RegistryOpsMemoizedMixin {
@Shadow @Final @Mutable
private Map<ResourceKey<? extends Registry<?>>, Optional<? extends RegistryOps.RegistryInfo<?>>> lookups;
@Inject(method = "<init>", at = @At("RETURN"))
private void useConcurrentMap(RegistryOps.RegistryInfoLookup registryInfoLookup, CallbackInfo ci) {
this.lookups = new ConcurrentHashMap<>(this.lookups);
}
}

View File

@ -0,0 +1,14 @@
package org.embeddedt.modernfix.common.mixin.bugfix.removed_dimensions;
import net.minecraft.world.level.storage.LevelStorageSource;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(LevelStorageSource.class)
public class LevelStorageSourceMixin {
@ModifyArg(method = "*", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/DataResult;getOrThrow(ZLjava/util/function/Consumer;)Ljava/lang/Object;", ordinal = 0), index = 0)
private static boolean alwaysAllowPartialDimensions(boolean flag) {
return true;
}
}

View File

@ -0,0 +1,22 @@
package org.embeddedt.modernfix.common.mixin.bugfix.restore_old_dragon_movement;
import net.minecraft.world.entity.boss.enderdragon.EnderDragon;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.Slice;
@Mixin(EnderDragon.class)
public class EnderDragonMixin {
/**
* @author embeddedt (regression identified by Jukitsu in MC-272431)
* @reason Revert dragon vertical movement behavior to how it worked in 1.13 and older. Note: this patches techniques
* that rely on the predictable vertical descent like one-cycling.
*/
@ModifyArg(method = "aiStep",
slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/boss/enderdragon/phases/DragonPhaseInstance;getFlyTargetLocation()Lnet/minecraft/world/phys/Vec3;")),
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/phys/Vec3;add(DDD)Lnet/minecraft/world/phys/Vec3;", ordinal = 0), index = 1)
private double fixVerticalVelocityScale(double y) {
return y * 10;
}
}

View File

@ -0,0 +1,27 @@
package org.embeddedt.modernfix.common.mixin.bugfix.unsafe_modded_shape_caches;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* see {@link ShapeCacheRSMixin}
*/
@Pseudo
@Mixin(targets = { "com/lothrazar/cyclic/block/cable/ShapeCache" }, remap = false)
@RequiresMod("cyclic")
@SuppressWarnings("rawtypes")
public class ShapeCacheCyclicMixin {
@Shadow @Final @Mutable private static final Map CACHE = new ConcurrentHashMap();
@Inject(method = "<clinit>", at = @At("RETURN"))
private static void mfix$notify(CallbackInfo ci) {
ModernFix.LOGGER.info("Made Cyclic shape cache map thread-safe");
}
}

View File

@ -0,0 +1,29 @@
package org.embeddedt.modernfix.common.mixin.bugfix.unsafe_modded_shape_caches;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.RequiresMod;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Some mods use a custom shape cache with a non-thread-safe map. There is no reason why this wouldn't cause crashes
* in vanilla as well if getShape was called on two threads at once. It seems more likely to happen with ModernFix
* installed due to the dynamic blockstate cache generation, so we solve it by making the maps thread-safe.
*/
@Pseudo
@Mixin(targets = { "com/refinedmods/refinedstorage/block/shape/ShapeCache" }, remap = false)
@RequiresMod("refinedstorage")
@SuppressWarnings("rawtypes")
public class ShapeCacheRSMixin {
@Shadow @Final @Mutable private static final Map CACHE = new ConcurrentHashMap();
@Inject(method = "<clinit>", at = @At("RETURN"))
private static void mfix$notify(CallbackInfo ci) {
ModernFix.LOGGER.info("Made Refined Storage shape cache map thread-safe");
}
}

View File

@ -0,0 +1,43 @@
package org.embeddedt.modernfix.common.mixin.bugfix.world_leaks;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.lighting.LevelLightEngine;
import org.embeddedt.modernfix.ModernFix;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.jetbrains.annotations.Nullable;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.concurrent.atomic.AtomicReferenceArray;
@Mixin(Minecraft.class)
@ClientOnlyMixin
public class MinecraftMixin {
@Shadow @Nullable public ClientLevel level;
/**
* To mitigate the effect of leaked client worlds, clear most of the data structures that waste memory.
*/
@Inject(method = "clearLevel(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;"))
private void clearLevelDataForLeaks(CallbackInfo ci) {
if(this.level != null) {
try {
AtomicReferenceArray<LevelChunk> chunks = this.level.getChunkSource().storage.chunks;
for(int i = 0; i < chunks.length(); i++) {
chunks.set(i, null);
}
this.level.getChunkSource().lightEngine = new LevelLightEngine(this.level.getChunkSource(), false, false);
// clear BE list otherwise they will hold chunks
this.level.blockEntityTickers.clear();
} catch(RuntimeException e) {
ModernFix.LOGGER.error("Exception clearing level data", e);
}
}
}
}

View File

@ -0,0 +1,24 @@
package org.embeddedt.modernfix.common.mixin.bugfix.world_screen_skipped;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen;
import net.minecraft.client.gui.screens.worldselection.WorldSelectionList;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(WorldSelectionList.WorldListEntry.class)
@ClientOnlyMixin
public class WorldSelectionListMixin {
@Shadow @Final private Minecraft minecraft;
@Inject(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/worldselection/WorldSelectionList$WorldListEntry;doDeleteWorld()V", ordinal = 0, shift = At.Shift.AFTER), cancellable = true)
private void preventClosingCreateScreenAfterDelete(CallbackInfo ci) {
if(minecraft.screen instanceof CreateWorldScreen)
ci.cancel();
}
}

View File

@ -0,0 +1,22 @@
package org.embeddedt.modernfix.common.mixin.core;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.server.Bootstrap;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Bootstrap.class)
@ClientOnlyMixin
public class BootstrapClientMixin {
/**
* Hack to workaround RenderStateShard deadlock (by loading it early on a single thread). We use validate
* here to ensure Forge registries are initialized.
*/
@Inject(method = "validate", at = @At("HEAD"))
private static void loadClientClasses(CallbackInfo ci) {
RenderType.solid();
}
}

View File

@ -0,0 +1,38 @@
package org.embeddedt.modernfix.common.mixin.core;
import net.minecraft.server.Bootstrap;
import net.minecraftforge.network.NetworkConstants;
import org.embeddedt.modernfix.forge.classloading.ManifestCompactor;
import org.slf4j.Logger;
import org.embeddedt.modernfix.forge.load.ModWorkManagerQueue;
import org.embeddedt.modernfix.util.TimeFormatter;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.lang.management.ManagementFactory;
@Mixin(Bootstrap.class)
public class BootstrapMixin {
@Shadow private static boolean isBootstrapped;
@Shadow @Final private static Logger LOGGER;
@Inject(method = "bootStrap", at = @At("HEAD"))
private static void doModernFixBootstrap(CallbackInfo ci) {
if(!isBootstrapped) {
LOGGER.info("ModernFix reached bootstrap stage ({} after launch)", TimeFormatter.formatNanos(ManagementFactory.getRuntimeMXBean().getUptime() * 1000L * 1000L));
ModWorkManagerQueue.replace();
ManifestCompactor.compactManifests();
}
}
/* for https://github.com/MinecraftForge/MinecraftForge/issues/9505 */
@Inject(method = "bootStrap", at = @At("RETURN"))
private static void doClassloadHack(CallbackInfo ci) {
NetworkConstants.init();
}
}

View File

@ -0,0 +1,31 @@
package org.embeddedt.modernfix.common.mixin.core;
import net.minecraftforge.forgespi.language.IModInfo;
import net.minecraftforge.logging.CrashReportAnalyser;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Map;
@Mixin(CrashReportAnalyser.class)
public class CrashReportAnalyserMixin {
@Shadow @Final private static Map<IModInfo, String[]> SUSPECTED_MODS;
/**
* @author embeddedt
* @reason Remove ModernFix from the list of suspected mods when a crash happens. Otherwise, we get blamed
* for "registry object not present" crashes if users don't interpret the crash before reporting
* it.
*
* It seems unlikely ModernFix will simultaneously cause a crash while it's not obvious it caused it.
*/
@Inject(method = "buildSuspectedModsSection", at = @At("HEAD"), require = 0, remap = false)
private static void removeOurselvesFromSuspectedMods(StringBuilder stringBuilder, CallbackInfo ci) {
SUSPECTED_MODS.keySet().removeIf(iModInfo -> iModInfo.getModId().equals("modernfix"));
}
}

View File

@ -0,0 +1,16 @@
package org.embeddedt.modernfix.common.mixin.core;
import net.minecraftforge.registries.GameData;
import org.embeddedt.modernfix.forge.init.ModernFixForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(value = GameData.class, remap = false)
public class GameDataMixin {
@Inject(method = "postRegisterEvents", at = @At("RETURN"))
private static void markPosted(CallbackInfo ci) {
ModernFixForge.registryEventsFired = true;
}
}

View File

@ -0,0 +1,43 @@
package org.embeddedt.modernfix.common.mixin.core;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import net.minecraft.Util;
import net.minecraft.server.MinecraftServer;
import org.embeddedt.modernfix.duck.ITimeTrackingServer;
import org.embeddedt.modernfix.forge.load.MinecraftServerReloadTracker;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
@Mixin(MinecraftServer.class)
public class MinecraftServerMixin implements ITimeTrackingServer {
@Inject(method = "reloadResources", at = @At("HEAD"))
private void startReloadTrack(Collection<String> selectedIds, CallbackInfoReturnable<CompletableFuture<Void>> cir) {
MinecraftServerReloadTracker.ACTIVE_RELOADS++;
}
@ModifyExpressionValue(method = "reloadResources", at = @At(value = "INVOKE", target = "Ljava/util/concurrent/CompletableFuture;thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;", ordinal = 0))
private CompletableFuture<Void> mfix$endReloadTrack(CompletableFuture<Void> original) {
return original.thenAcceptAsync(val -> {
MinecraftServerReloadTracker.ACTIVE_RELOADS--;
}, (Executor)this);
}
private long mfix$lastTickStartTime = -1L;
@Override
public long mfix$getLastTickStartTime() {
return mfix$lastTickStartTime;
}
@Inject(method = "runServer", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;tickServer(Ljava/util/function/BooleanSupplier;)V"))
private void trackTickTime(CallbackInfo ci) {
mfix$lastTickStartTime = Util.getMillis();
}
}

View File

@ -0,0 +1,22 @@
package org.embeddedt.modernfix.common.mixin.core;
import net.minecraft.network.Connection;
import net.minecraftforge.network.NetworkHooks;
import org.embeddedt.modernfix.forge.packet.NetworkUtils;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(NetworkHooks.class)
public abstract class NetworkHooksMixin {
@Shadow public static boolean isVanillaConnection(Connection manager) {
throw new AssertionError();
}
@Inject(method = "handleClientLoginSuccess", at = @At("RETURN"), remap = false)
private static void setVanillaGlobalFlag(Connection manager, CallbackInfo ci) {
NetworkUtils.isCurrentlyVanilla = isVanillaConnection(manager);
}
}

View File

@ -0,0 +1,18 @@
package org.embeddedt.modernfix.common.mixin.core;
import net.minecraft.world.level.chunk.Palette;
import net.minecraft.world.level.chunk.PalettedContainer;
import org.embeddedt.modernfix.chunk.ExtendedPalettedContainer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(PalettedContainer.class)
public class PalettedContainerMixin<T> implements ExtendedPalettedContainer<T> {
@Shadow
private volatile PalettedContainer.Data<T> data;
@Override
public Palette<T> mfix$getPalette() {
return this.data.palette();
}
}

View File

@ -0,0 +1,29 @@
package org.embeddedt.modernfix.common.mixin.core;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.llamalad7.mixinextras.sugar.Local;
import net.minecraft.server.WorldLoader;
import org.embeddedt.modernfix.forge.load.MinecraftServerReloadTracker;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
@Mixin(WorldLoader.class)
public class WorldLoaderMixin {
@Inject(method = "load", at = @At("HEAD"))
private static void trackStartReload(CallbackInfoReturnable<CompletableFuture<?>> cir) {
MinecraftServerReloadTracker.ACTIVE_RELOADS++;
}
@ModifyReturnValue(method = "load", at = @At("RETURN"))
private static <V> CompletableFuture<V> trackEndReload(CompletableFuture<V> original, @Local(ordinal = 1, argsOnly = true) Executor syncExecutor) {
return original.thenApplyAsync(val -> {
MinecraftServerReloadTracker.ACTIVE_RELOADS--;
return val;
}, syncExecutor);
}
}

View File

@ -0,0 +1,16 @@
package org.embeddedt.modernfix.common.mixin.devenv;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.registries.ForgeRegistry;
import net.minecraftforge.registries.GameData;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(GameData.class)
public class GameDataMixin {
@Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/registries/ForgeRegistry;dump(Lnet/minecraft/resources/ResourceLocation;)V", remap = false))
private static void noDump(ForgeRegistry<?> reg, ResourceLocation id) {
}
}

View File

@ -0,0 +1,22 @@
package org.embeddedt.modernfix.common.mixin.devenv;
import com.mojang.authlib.minecraft.UserApiService;
import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
import net.minecraft.client.Minecraft;
import net.minecraft.client.main.GameConfig;
import org.embeddedt.modernfix.annotation.ClientOnlyMixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
@Mixin(Minecraft.class)
@ClientOnlyMixin
public class MinecraftMixin {
/**
* @author embeddedt
* @reason avoid exception stacktrace being printed in dev
*/
@Overwrite
private UserApiService createUserApiService(YggdrasilAuthenticationService yggdrasilAuthenticationService, GameConfig arg) {
return UserApiService.OFFLINE;
}
}

View File

@ -0,0 +1,34 @@
package org.embeddedt.modernfix.common.mixin.feature.blockentity_incorrect_thread;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelHeightAccessor;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.LevelChunkSection;
import net.minecraft.world.level.chunk.UpgradeData;
import net.minecraft.world.level.levelgen.blending.BlendingData;
import org.embeddedt.modernfix.util.ConcurrencySanitizingMap;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Map;
@Mixin(ChunkAccess.class)
public class ChunkAccessMixin {
@Shadow @Final @Mutable protected Map<BlockPos, BlockEntity> blockEntities;
@Inject(method = "<init>", at = @At("RETURN"))
private void wrapInConcurrencyDetector(ChunkPos chunkPos, UpgradeData upgradeData, LevelHeightAccessor levelHeightAccessor, Registry biomeRegistry, long inhabitedTime, LevelChunkSection[] sections, BlendingData blendingData, CallbackInfo ci) {
if (levelHeightAccessor instanceof Level level) {
this.blockEntities = new ConcurrencySanitizingMap<>(this.blockEntities, ((LevelThreadAccessor)level).getThread());
}
}
}

View File

@ -0,0 +1,11 @@
package org.embeddedt.modernfix.common.mixin.feature.blockentity_incorrect_thread;
import net.minecraft.world.level.Level;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(Level.class)
public interface LevelThreadAccessor {
@Accessor
Thread getThread();
}

View File

@ -0,0 +1,23 @@
package org.embeddedt.modernfix.common.mixin.feature.branding;
import com.google.common.collect.ImmutableList;
import net.minecraftforge.internal.BrandingControl;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModList;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import java.util.Optional;
@Mixin(value = BrandingControl.class, remap = false, priority = 1100)
public class BrandingControlMixin {
@Inject(method = "computeBranding", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/ModList;get()Lnet/minecraftforge/fml/ModList;"), locals = LocalCapture.CAPTURE_FAILHARD, require = 0)
private static void addModernFixBranding(CallbackInfo ci, ImmutableList.Builder<String> builder) {
Optional<? extends ModContainer> mfContainer = ModList.get().getModContainerById("modernfix");
if(mfContainer.isPresent())
builder.add("ModernFix " + mfContainer.get().getModInfo().getVersion().toString());
}
}

Some files were not shown because too many files have changed in this diff Show More