Changed TagLoader injection point

This commit is contained in:
Aleksey 2021-04-22 09:44:01 +03:00
parent 6487ac81c6
commit bc07b34f1c
2 changed files with 12 additions and 12 deletions

View file

@ -3,11 +3,14 @@ package ru.betterend.mixin.common;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.function.Supplier;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
@ -16,6 +19,7 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.tags.Tag; import net.minecraft.tags.Tag;
import net.minecraft.tags.TagLoader; import net.minecraft.tags.TagLoader;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import ru.betterend.util.TagHelper; import ru.betterend.util.TagHelper;
@Mixin(TagLoader.class) @Mixin(TagLoader.class)
@ -23,13 +27,11 @@ public class TagLoaderMixin {
@Shadow @Shadow
private String name; private String name;
@Inject(method = "prepare", at = @At("RETURN"), cancellable = true) @ModifyArg(method = "prepare", at = @At(value = "INVOKE",
public void be_prepareReload(ResourceManager manager, Executor executor, CallbackInfoReturnable<CompletableFuture<Map<ResourceLocation, Tag.Builder>>> info) { target = "Ljava/util/concurrent/CompletableFuture;supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"))
CompletableFuture<Map<ResourceLocation, Tag.Builder>> future = info.getReturnValue(); public Supplier<Map<ResourceLocation, Tag.Builder>> be_modifyTags(Supplier<Map<ResourceLocation, Tag.Builder>> supplier, Executor executor) {
info.setReturnValue(CompletableFuture.supplyAsync(() -> { Map<ResourceLocation, Tag.Builder> map = supplier.get();
Map<ResourceLocation, Tag.Builder> map = Maps.newHashMap(future.join()); TagHelper.apply(name, map);
TagHelper.apply(name, map); return () -> map;
return map;
}, executor));
} }
} }

View file

@ -66,9 +66,7 @@ public class TagHelper {
endTags = TAGS_ITEM; endTags = TAGS_ITEM;
} }
if (endTags != null) { if (endTags != null) {
endTags.forEach((id, ids) -> { endTags.forEach((id, ids) -> apply(tagsMap.computeIfAbsent(id, key -> Tag.Builder.tag()), ids));
apply(tagsMap.computeIfAbsent(id, key -> Tag.Builder.tag()), ids);
});
} }
} }
} }