Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.At.Shift;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
Expand All @@ -12,11 +14,15 @@
import net.minecraft.client.resource.pack.BuiltInResourcePack;
import net.minecraft.resource.Identifier;

import net.ornithemc.conditionalmixin.annotations.Conditional;
import net.ornithemc.conditionalmixin.annotations.Version;

import net.ornithemc.osl.resource.loader.impl.adapter.FilePathIdentifier;

@Mixin(BuiltInResourcePack.class)
public class BuiltInResourcePackMixinOld {
public class BuiltInResourcePackMixin {

@Conditional(minecraftVersion = @Version("<16w32b"))
@WrapOperation(
method = "openResource",
at = @At(
Expand All @@ -31,4 +37,21 @@ public class BuiltInResourcePackMixinOld {

return op.call(cls, path);
}

@Conditional(minecraftVersion = @Version(">=16w32b"))
@ModifyVariable(
method = "openResource",
at = @At(
value = "INVOKE",
target = "Ljava/lang/Class;getResource(Ljava/lang/String;)Ljava/net/URL;",
shift = Shift.BEFORE // shift to before the try { } block
)
)
private String osl$resource_loader$getResourceFromFilePathIdentifier(String path, @Local Identifier location) {
if (location instanceof FilePathIdentifier) {
path = "/" + location.toString();
}

return path;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
import net.minecraft.client.resource.pack.LegacyResourcePack;
import net.minecraft.client.resource.pack.ResourcePack;

// only exists in 15w31a+
import net.ornithemc.conditionalmixin.annotations.Conditional;
import net.ornithemc.conditionalmixin.annotations.Version;

@Conditional(minecraftVersion = @Version(">=16w32a"))
@Mixin(LegacyResourcePack.class)
public interface LegacyResourcePackAccess {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public class MinecraftMixin {
this.resourceManager = new ResourceManagerAdapter(this.resourceMetadataSerializerRegistry, this.actualResourceManager);

this.actualResourceManager.reset();
// this.actualResourceManager.addAll(this.packRepository.openSelectedPacks()); // handled by Vanilla
}

@Inject(
Expand All @@ -63,6 +64,8 @@ public class MinecraftMixin {
)
private void osl$resource_loader$initResourceManager(CallbackInfo ci) {
this.actualResourceManager.init();
// Vanilla reloaders are triggered when registered
// OSL reloaders are queued and reloaded at once
this.actualResourceManager.partialReload();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ private void load() { }
this.packRepository.addSource(this); // resourcepacks/ directory source

this.packRepository.init();
// this.packRepository.reload(); // handled by Vanilla
}

@Inject(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,12 @@

import net.minecraft.server.AdvancementManager;

import net.ornithemc.conditionalmixin.annotations.Conditional;
import net.ornithemc.conditionalmixin.annotations.Version;

import net.ornithemc.osl.resource.loader.api.resource.ResourcePath;

@Conditional(minecraftVersion = @Version(">=17w13a"))
@Mixin(AdvancementManager.class)
public class AdvancementManagerMixin {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,12 @@

import net.minecraft.crafting.CraftingManager;

import net.ornithemc.conditionalmixin.annotations.Conditional;
import net.ornithemc.conditionalmixin.annotations.Version;

import net.ornithemc.osl.resource.loader.api.resource.ResourcePath;

@Conditional(minecraftVersion = @Version(">=17w13a"))
@Mixin(CraftingManager.class)
public class CraftingManagerMixin {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
"minVersion": "0.8",
"package": "net.ornithemc.osl.resource.loader.impl.mixin",
"compatibilityLevel": "JAVA_8",
"plugin": "net.ornithemc.osl.resource.loader.impl.ResourceLoaderMixinPlugin",
"plugin": "net.ornithemc.conditionalmixin.mixin.ConditionalMixinPlugin",
"mixins": [
"common.AdvancementManagerMixin",
"common.CraftingManagerMixin"
],
"client": [
"client.BuiltInResourcePackMixinNew",
"client.BuiltInResourcePackMixinOld",
"client.BuiltInResourcePackMixin",
"client.CustomResourcePackAccess",
"client.LegacyResourcePackAccess",
"client.MinecraftMixin",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package net.ornithemc.osl.resource.loader.api.client;

public interface MinecraftExtension {

void reloadResources();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package net.ornithemc.osl.resource.loader.impl.client;

import net.ornithemc.osl.resource.loader.api.client.MinecraftExtension;

public interface MinecraftExtensionImpl extends MinecraftExtension {

@Override
default void reloadResources() {
throw new AbstractMethodError();
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,51 @@
package net.ornithemc.osl.resource.loader.impl.mixin.client;

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.At.Shift;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import net.minecraft.client.Minecraft;
import net.minecraft.client.render.texture.TextureManager;
import net.minecraft.client.render.world.WorldRenderer;

import net.ornithemc.conditionalmixin.annotations.Conditional;
import net.ornithemc.conditionalmixin.annotations.Version;

import net.ornithemc.osl.resource.loader.api.client.MinecraftExtension;
import net.ornithemc.osl.resource.loader.api.resource.reload.ResourceReloader;
import net.ornithemc.osl.resource.loader.impl.ResourceLoader;
import net.ornithemc.osl.resource.loader.impl.resource.manager.SimpleReloadableResourceManager;
import net.ornithemc.osl.resource.loader.impl.resource.repository.SimpleResourcePackRepository;

@Mixin(Minecraft.class)
public class MinecraftMixin {
public class MinecraftMixin implements MinecraftExtension {

@Shadow
private TextureManager textureManager;
@Shadow
private WorldRenderer worldRenderer;

@Unique
private SimpleResourcePackRepository packRepository;
@Unique
private SimpleReloadableResourceManager resourceManager;

@Inject(
method = "init",
at = @At(
value = "NEW",
target = "net/minecraft/client/resource/pack/TexturePacks"
)
)
private void osl$resource_loader$initPackRepository(CallbackInfo ci) {
this.packRepository = SimpleResourcePackRepository.client();
}

@Inject(
method = "init",
at = @At(
Expand All @@ -29,7 +58,44 @@ public class MinecraftMixin {
private void osl$resource_loader$initResourceManager(CallbackInfo ci) {
this.resourceManager = SimpleReloadableResourceManager.client();

this.resourceManager.reset();
this.resourceManager.addAll(this.packRepository.openSelectedPacks());

this.reloadResources();

this.resourceManager.addReloadedReloader((ResourceReloader) this.textureManager);

this.resourceManager.init();
// Vanilla reloaders are triggered when registered
// OSL reloaders are queued and reloaded at once
this.resourceManager.partialReload();
}

@Conditional(minecraftVersion = @Version(">=13w01a"))
@Redirect(
method = "tick",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/render/world/WorldRenderer;reload()V",
ordinal = 0
)
)
private void osl$resource_loader$cancelWorldRendererReload(WorldRenderer worldRenderer) {
// WorldRenderer reload is handled in Minecraft.reloadResources()
}

@Override
public void reloadResources() {
this.packRepository.reload();

try {
this.resourceManager.reload(this.packRepository.openSelectedPacks());
} catch (RuntimeException e) {
ResourceLoader.LOGGER.warn("Error while reloading resources", e);
}

if (this.worldRenderer != null) {
this.worldRenderer.reload();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,18 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import net.minecraft.client.Minecraft;
import net.minecraft.client.render.texture.TextureManager;

import net.ornithemc.osl.lifecycle.api.client.MinecraftInstance;
import net.ornithemc.osl.resource.loader.api.resource.manager.ResourceManager;
import net.ornithemc.osl.resource.loader.api.resource.reload.ResourceReloadListener;
import net.ornithemc.osl.resource.loader.impl.resource.manager.SimpleReloadableResourceManager;
import net.ornithemc.osl.resource.loader.impl.resource.repository.SimpleResourcePackRepository;

@Mixin(TextureManager.class)
public class TextureManagerMixin implements ResourceReloadListener {

@Unique
private SimpleResourcePackRepository packRepository;
@Unique
private SimpleReloadableResourceManager resourceManager;
private Minecraft minecraft;

@Unique
private boolean vanillaReloading;
Expand All @@ -39,15 +37,7 @@ private void reload() { }
)
)
private void osl$resource_loader$initResourceManager(CallbackInfo ci) {
this.packRepository = SimpleResourcePackRepository.client();
this.resourceManager = SimpleReloadableResourceManager.client();

this.resourceManager.reset();
// ensure the selected packs have been applied
this.resourceManager.reload(this.packRepository.openSelectedPacks());

// let this class act as the texture reloader
this.resourceManager.addReloadedReloader(this);
this.minecraft = MinecraftInstance.get();
}

@Inject(
Expand All @@ -62,7 +52,7 @@ private void reload() { }
this.vanillaReloading = true;

if (!this.reloading) {
this.resourceManager.reload(this.packRepository.openSelectedPacks());
this.minecraft.reloadResources();

// cancel this call as the resource manager will trigger
// another recursive call through this.resourcesReloaded
Expand Down
Loading
Loading