Skip to content

Commit

Permalink
Neo 1.20.1 should now compile with Kilt. Just need to fix injects.
Browse files Browse the repository at this point in the history
  • Loading branch information
BluSpring committed Feb 21, 2024
1 parent b7e095c commit 61b399f
Show file tree
Hide file tree
Showing 50 changed files with 1,085 additions and 272 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ class AccessTransformerRemapper {
}
}

// Custom widener values for Kilt
widener += "transitive-accessible class net/minecraft/world/item/CreativeModeTab\$ItemDisplayBuilder"

if (!output.exists())
output.createNewFile()

Expand Down
2 changes: 1 addition & 1 deletion forge
Submodule forge updated 59 files
+1 −1 src/main/java/net/minecraftforge/client/CreativeModeTabSearchRegistry.java
+29 −78 src/main/java/net/minecraftforge/client/ForgeHooksClient.java
+4 −3 src/main/java/net/minecraftforge/client/ForgeRenderTypes.java
+9 −17 src/main/java/net/minecraftforge/common/CreativeModeTabRegistry.java
+72 −124 src/main/java/net/minecraftforge/common/ForgeHooks.java
+10 −9 src/main/java/net/minecraftforge/common/ForgeInternalHandler.java
+42 −66 src/main/java/net/minecraftforge/common/ForgeMod.java
+1 −1 src/main/java/net/minecraftforge/common/ForgeSpawnEggItem.java
+6 −6 src/main/java/net/minecraftforge/common/Tags.java
+3 −1 src/main/java/net/minecraftforge/common/capabilities/ICapabilityProvider.java
+12 −4 src/main/java/net/minecraftforge/common/capabilities/ICapabilityProviderImpl.java
+11 −11 src/main/java/net/minecraftforge/common/crafting/CompoundIngredient.java
+13 −19 src/main/java/net/minecraftforge/common/crafting/CraftingHelper.java
+1 −1 src/main/java/net/minecraftforge/common/crafting/DifferenceIngredient.java
+1 −1 src/main/java/net/minecraftforge/common/crafting/IntersectionIngredient.java
+6 −2 src/main/java/net/minecraftforge/common/data/BlockTagsProvider.java
+1 −1 src/main/java/net/minecraftforge/common/data/DatapackBuiltinEntriesProvider.java
+4 −1 src/main/java/net/minecraftforge/common/data/ForgeBiomeTagsProvider.java
+6 −3 src/main/java/net/minecraftforge/common/data/ForgeDamageTypeTagsProvider.java
+4 −1 src/main/java/net/minecraftforge/common/data/ForgeEntityTypeTagsProvider.java
+4 −1 src/main/java/net/minecraftforge/common/data/ForgeFluidTagsProvider.java
+5 −3 src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java
+8 −9 src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java
+5 −9 src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java
+17 −24 src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java
+9 −6 src/main/java/net/minecraftforge/common/extensions/IForgeBlockEntity.java
+3 −2 src/main/java/net/minecraftforge/common/extensions/IForgeEnchantment.java
+12 −11 src/main/java/net/minecraftforge/common/extensions/IForgeEntity.java
+23 −23 src/main/java/net/minecraftforge/common/extensions/IForgeItem.java
+20 −21 src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java
+4 −3 src/main/java/net/minecraftforge/common/extensions/IForgePackResources.java
+4 −3 src/main/java/net/minecraftforge/common/extensions/IForgeTagAppender.java
+5 −3 src/main/java/net/minecraftforge/common/world/BiomeGenerationSettingsBuilder.java
+2 −1 src/main/java/net/minecraftforge/common/world/ClimateSettingsBuilder.java
+49 −256 src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java
+8 −7 src/main/java/net/minecraftforge/common/world/MobSpawnSettingsBuilder.java
+3 −2 src/main/java/net/minecraftforge/event/AddReloadListenerEvent.java
+38 −106 src/main/java/net/minecraftforge/event/ForgeEventFactory.java
+2 −2 src/main/java/net/minecraftforge/event/RegisterGameTestsEvent.java
+2 −1 src/main/java/net/minecraftforge/event/entity/EntityAttributeModificationEvent.java
+2 −1 src/main/java/net/minecraftforge/event/entity/EntityEvent.java
+6 −11 src/main/java/net/minecraftforge/event/entity/living/MobSpawnEvent.java
+1 −0 src/main/java/net/minecraftforge/event/entity/player/TradeWithVillagerEvent.java
+8 −5 src/main/java/net/minecraftforge/event/level/LevelEvent.java
+5 −4 src/main/java/net/minecraftforge/gametest/ForgeGameTestHooks.java
+1 −1 src/main/java/net/minecraftforge/gametest/GameTestHolder.java
+7 −8 src/main/java/net/minecraftforge/internal/BrandingControl.java
+5 −5 src/main/java/net/minecraftforge/items/ItemHandlerHelper.java
+8 −8 src/main/java/net/minecraftforge/items/VanillaInventoryCodeHooks.java
+4 −2 src/main/java/net/minecraftforge/logging/CrashReportExtender.java
+3 −3 src/main/java/net/minecraftforge/network/PlayMessages.java
+11 −17 src/main/java/net/minecraftforge/network/filters/VanillaConnectionNetworkFilter.java
+3 −9 src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java
+22 −26 src/main/java/net/minecraftforge/registries/ForgeRegistries.java
+13 −19 src/main/java/net/minecraftforge/registries/GameData.java
+8 −18 src/main/java/net/minecraftforge/registries/NamespacedWrapper.java
+9 −7 src/main/java/net/minecraftforge/registries/NewRegistryEvent.java
+9 −10 src/main/java/net/minecraftforge/registries/holdersets/AnyHolderSet.java
+10 −17 src/main/java/net/minecraftforge/registries/holdersets/NotHolderSet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package xyz.bluspring.kilt.forgeinjects.client.renderer.texture;

import com.mojang.blaze3d.platform.NativeImage;
import net.minecraft.client.renderer.texture.SpriteContents;
import net.minecraft.client.resources.metadata.animation.AnimationMetadataSection;
import net.minecraft.client.resources.metadata.animation.FrameSize;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.client.textures.ForgeTextureMetadata;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import xyz.bluspring.kilt.helpers.mixin.CreateInitializer;
import xyz.bluspring.kilt.injections.client.renderer.texture.SpriteContentsInjection;

@Mixin(SpriteContents.class)
public class SpriteContentsInject implements SpriteContentsInjection {
@Shadow @Final private NativeImage originalImage;
@Nullable
public ForgeTextureMetadata forgeMeta;

public SpriteContentsInject(ResourceLocation name, FrameSize frameSize, NativeImage originalImage, AnimationMetadataSection metadata) {}

@CreateInitializer
public SpriteContentsInject(ResourceLocation name, FrameSize frameSize, NativeImage originalImage, AnimationMetadataSection metadata, @Nullable ForgeTextureMetadata forgeMeta) {
this.forgeMeta = forgeMeta;
}


@Override
public NativeImage getOriginalImage() {
return this.originalImage;
}

@Override
public ForgeTextureMetadata kilt$getForgeMeta() {
return this.forgeMeta;
}

@Override
public void kilt$setForgeMeta(ForgeTextureMetadata metadata) {
this.forgeMeta = metadata;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package xyz.bluspring.kilt.forgeinjects.core;

import net.minecraft.core.Registry;
import net.minecraft.core.RegistrySetBuilder;
import net.minecraft.resources.ResourceKey;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import xyz.bluspring.kilt.injections.core.RegistrySetBuilderInjection;

import java.util.List;

@Mixin(RegistrySetBuilder.class)
public class RegistrySetBuilderInject implements RegistrySetBuilderInjection {
@Shadow @Final public List<RegistrySetBuilder.RegistryStub<?>> entries;

@Override
public List<? extends ResourceKey<? extends Registry<?>>> getEntryKeys() {
return this.entries.stream().map(RegistrySetBuilder.RegistryStub::key).toList();
}
}
Original file line number Diff line number Diff line change
@@ -1,43 +1,57 @@
package xyz.bluspring.kilt.forgeinjects.data;

import net.minecraft.WorldVersion;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.DataProvider;
import org.apache.commons.compress.utils.Lists;
import org.objectweb.asm.Opcodes;
import net.minecraft.data.PackOutput;
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.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.Unique;
import xyz.bluspring.kilt.injections.data.DataGeneratorInjection;
import xyz.bluspring.kilt.mixin.DataGeneratorAccessor;

import java.nio.file.Path;
import java.util.Collection;
import java.util.List;
import java.util.Collections;
import java.util.Map;
import java.util.Set;

@Mixin(DataGenerator.class)
public class DataGeneratorInject implements DataGeneratorInjection {
@Shadow @Final private Collection<Path> inputFolders;
@Shadow @Final private Map<String, DataProvider> providersToRun;
@Shadow @Final private PackOutput vanillaPackOutput;
@Shadow @Final private Path rootOutputFolder;
@Shadow @Final private Set<String> allProviderIds;
@Unique private final Map<String, DataProvider> providersView = Collections.unmodifiableMap(this.providersToRun);

@Shadow @Final private List<DataProvider> allProviders;
@Override
public Map<String, DataProvider> getProvidersView() {
return this.providersView;
}

@Redirect(at = @At(value = "FIELD", target = "Lnet/minecraft/data/DataGenerator;inputFolders:Ljava/util/Collection;", opcode = Opcodes.PUTFIELD), method = "<init>")
public void kilt$makeInputsMutable(DataGenerator instance, Collection<Path> value) {
((DataGeneratorAccessor) instance).setInputFolders(Lists.newArrayList(value.iterator()));
@Override
public PackOutput getPackOutput() {
return this.vanillaPackOutput;
}

@Override
public List<DataProvider> getProviders() {
return this.allProviders;
public PackOutput getPackOutput(String path) {
return new PackOutput(this.rootOutputFolder.resolve(path));
}

@Override
public void addInput(Path value) {
inputFolders.add(value);
public <T extends DataProvider> T addProvider(boolean run, DataProvider.Factory<T> factory) {
return addProvider(run, factory.create(this.vanillaPackOutput));
}

@Override
public <T extends DataProvider> T addProvider(boolean run, T provider) {
var id = provider.getName();

if (!this.allProviderIds.add(id))
throw new IllegalStateException("Duplicate provider: " + id);

if (run)
this.providersToRun.put(id, provider);

return provider;
}
}
Original file line number Diff line number Diff line change
@@ -1,162 +1,24 @@
package xyz.bluspring.kilt.forgeinjects.data.recipes;

import com.google.gson.JsonObject;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeProvider;
import net.minecraft.data.recipes.ShapedRecipeBuilder;
import net.minecraft.data.recipes.ShapelessRecipeBuilder;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.common.Tags;
import net.minecraftforge.registries.ForgeRegistries;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.*;
import org.spongepowered.asm.mixin.Shadow;
import xyz.bluspring.kilt.injections.data.recipes.RecipeProviderInjection;

import java.lang.reflect.Field;
import java.util.*;
import java.util.function.Consumer;
import java.util.concurrent.CompletableFuture;

@Mixin(RecipeProvider.class)
public class RecipeProviderInject {
private static final Map<Item, TagKey<Item>> replacements = new HashMap<>();
private static final Set<ResourceLocation> excludes = new HashSet<>();
public class RecipeProviderInject implements RecipeProviderInjection {
@Shadow public PackOutput.PathProvider advancementPathProvider;

private static void exclude(ItemLike item)
{
excludes.add(ForgeRegistries.ITEMS.getKey(item.asItem()));
}

private static void replace(ItemLike item, TagKey<Item> tag)
{
replacements.put(item.asItem(), tag);
}

@Nullable
private static FinishedRecipe enhance(FinishedRecipe vanilla)
{
if (vanilla instanceof ShapelessRecipeBuilder.Result shapeless)
return enhance(shapeless);
if (vanilla instanceof ShapedRecipeBuilder.Result shaped)
return enhance(shaped);
return null;
}

@Nullable
private static FinishedRecipe enhance(ShapelessRecipeBuilder.Result vanilla)
{
List<Ingredient> ingredients = getField(ShapelessRecipeBuilder.Result.class, vanilla, 4);
boolean modified = false;
for (int x = 0; x < ingredients.size(); x++)
{
Ingredient ing = enhance(vanilla.getId(), ingredients.get(x));
if (ing != null)
{
ingredients.set(x, ing);
modified = true;
}
}
return modified ? vanilla : null;
}

@Nullable
private static FinishedRecipe enhance(ShapedRecipeBuilder.Result vanilla)
{
Map<Character, Ingredient> ingredients = getField(ShapedRecipeBuilder.Result.class, vanilla, 5);
boolean modified = false;
for (Character x : ingredients.keySet())
{
Ingredient ing = enhance(vanilla.getId(), ingredients.get(x));
if (ing != null)
{
ingredients.put(x, ing);
modified = true;
}
}
return modified ? vanilla : null;
}

@Nullable
private static Ingredient enhance(ResourceLocation name, Ingredient vanilla)
{
if (excludes.contains(name))
return null;

boolean modified = false;
List<Ingredient.Value> items = new ArrayList<>();
Ingredient.Value[] vanillaItems = getField(Ingredient.class, vanilla, 2); //This will probably crash between versions, if null fix index
for (Ingredient.Value entry : vanillaItems)
{
if (entry instanceof Ingredient.ItemValue)
{
ItemStack stack = entry.getItems().stream().findFirst().orElse(ItemStack.EMPTY);
TagKey<Item> replacement = replacements.get(stack.getItem());
if (replacement != null)
{
items.add(new Ingredient.TagValue(replacement));
modified = true;
} else
items.add(entry);
} else
items.add(entry);
}
return modified ? Ingredient.fromValues(items.stream()) : null;
}

@SuppressWarnings("unchecked")
private static <T, R> R getField(Class<T> clz, T inst, int index)
{
Field fld = clz.getDeclaredFields()[index];
fld.setAccessible(true);
try
{
return (R) fld.get(inst);
} catch (IllegalArgumentException | IllegalAccessException e)
{
throw new RuntimeException(e);
}
}

@ModifyVariable(at = @At("HEAD"), method = "buildCraftingRecipes", argsOnly = true)
private static Consumer<FinishedRecipe> kilt$replaceRecipes(Consumer<FinishedRecipe> consumer) {
replace(Items.STICK, Tags.Items.RODS_WOODEN);
replace(Items.GOLD_INGOT, Tags.Items.INGOTS_GOLD);
replace(Items.IRON_INGOT, Tags.Items.INGOTS_IRON);
replace(Items.NETHERITE_INGOT, Tags.Items.INGOTS_NETHERITE);
replace(Items.COPPER_INGOT, Tags.Items.INGOTS_COPPER);
replace(Items.AMETHYST_SHARD, Tags.Items.GEMS_AMETHYST);
replace(Items.DIAMOND, Tags.Items.GEMS_DIAMOND);
replace(Items.EMERALD, Tags.Items.GEMS_EMERALD);
replace(Items.CHEST, Tags.Items.CHESTS_WOODEN);
replace(Blocks.COBBLESTONE, Tags.Items.COBBLESTONE_NORMAL);
replace(Blocks.COBBLED_DEEPSLATE, Tags.Items.COBBLESTONE_DEEPSLATE);

exclude(Blocks.GOLD_BLOCK);
exclude(Items.GOLD_NUGGET);
exclude(Blocks.IRON_BLOCK);
exclude(Items.IRON_NUGGET);
exclude(Blocks.DIAMOND_BLOCK);
exclude(Blocks.EMERALD_BLOCK);
exclude(Blocks.NETHERITE_BLOCK);
exclude(Blocks.COPPER_BLOCK);
exclude(Blocks.AMETHYST_BLOCK);

exclude(Blocks.COBBLESTONE_STAIRS);
exclude(Blocks.COBBLESTONE_SLAB);
exclude(Blocks.COBBLESTONE_WALL);
exclude(Blocks.COBBLED_DEEPSLATE_STAIRS);
exclude(Blocks.COBBLED_DEEPSLATE_SLAB);
exclude(Blocks.COBBLED_DEEPSLATE_WALL);

return (vanilla) -> {
FinishedRecipe modified = enhance(vanilla);
if (modified != null)
consumer.accept(modified);
};
@Override
public @Nullable CompletableFuture<?> saveAdvancement(CachedOutput output, FinishedRecipe finishedRecipe, JsonObject advancementJson) {
return DataProvider.saveStable(output, advancementJson, this.advancementPathProvider.json(finishedRecipe.getAdvancementId()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package xyz.bluspring.kilt.forgeinjects.data.registries;

import net.minecraft.core.Registry;
import net.minecraft.data.registries.VanillaRegistries;
import net.minecraft.resources.ResourceKey;
import org.spongepowered.asm.mixin.Mixin;
import xyz.bluspring.kilt.helpers.mixin.CreateStatic;
import xyz.bluspring.kilt.injections.data.registries.VanillaRegistriesInjection;

import java.util.List;

@Mixin(VanillaRegistries.class)
public class VanillaRegistriesInject {
@CreateStatic
private static final List<? extends ResourceKey<? extends Registry<?>>> DATAPACK_REGISTRY_KEYS = VanillaRegistriesInjection.DATAPACK_REGISTRY_KEYS;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import net.minecraft.core.Registry;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.PackOutput;
import net.minecraft.data.tags.TagsProvider;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.PackType;
import net.minecraft.tags.TagBuilder;
Expand All @@ -23,15 +25,15 @@

@Mixin(TagsProvider.class)
public abstract class TagsProviderInject<T> implements TagsProviderInjection {
@Shadow @Final protected Registry<T> registry;
@Shadow @Final protected DataGenerator.PathProvider pathProvider;
@Shadow @Final
protected ResourceKey<? extends Registry<T>> registryKey;
@Shadow @Final
protected PackOutput.PathProvider pathProvider;

protected String modId = "vanilla";
protected ExistingFileHelper existingFileHelper = null;
@Unique
private final ExistingFileHelper.IResourceType resourceType = new ExistingFileHelper.ResourceType(PackType.SERVER_DATA, ".json", TagManager.getTagDir(this.registry.key()));

@Unique
private final ExistingFileHelper.IResourceType elementResourceType = new ExistingFileHelper.ResourceType(PackType.SERVER_DATA, ".json", ForgeHooks.prefixNamespace(this.registry.key().location()));
@Unique private final ExistingFileHelper.IResourceType resourceType = new ExistingFileHelper.ResourceType(PackType.SERVER_DATA, ".json", TagManager.getTagDir(this.registryKey));
@Unique private final ExistingFileHelper.IResourceType elementResourceType = new ExistingFileHelper.ResourceType(PackType.SERVER_DATA, ".json", ForgeHooks.prefixNamespace(this.registryKey.location()));

@CreateInitializer
protected TagsProviderInject(DataGenerator dataGenerator, Registry<T> registry, String modId, @Nullable ExistingFileHelper existingFileHelper) {
Expand All @@ -58,7 +60,7 @@ protected Path getPath(ResourceLocation id) {
}

@Mixin(TagsProvider.TagAppender.class)
public static class TagAppenderInject<T> implements IForgeTagAppender<T> {
public static class TagAppenderInject<T> implements IForgeTagAppender<T>, TagAppenderInjection {
@Shadow @Final private TagBuilder builder;
@Unique
private String modId;
Expand Down
Loading

0 comments on commit 61b399f

Please sign in to comment.