initial 19w06a update

This commit is contained in:
Adrian Siekierka 2019-02-06 21:48:38 +01:00
parent 6f93f1cfb7
commit fe18b98757
9 changed files with 59 additions and 52 deletions

View file

@ -27,7 +27,7 @@ targetCompatibility = 1.8
archivesBaseName = "fabric"
def baseVersion = "0.1.5"
def mcVersion = "19w05a"
def mcVersion = "19w06a"
def ENV = System.getenv()
version = baseVersion + "." + (ENV.BUILD_NUMBER ?: "local")
@ -38,7 +38,7 @@ minecraft {
dependencies {
minecraft "com.mojang:minecraft:$mcVersion"
mappings "net.fabricmc:yarn:$mcVersion.3"
mappings "net.fabricmc:yarn:$mcVersion.2"
modCompile "net.fabricmc:fabric-loader:0.3.5.106"
}

View file

@ -31,7 +31,7 @@ import java.util.Collections;
*
* {@link ResourceReloadListenerKeys}
*/
public interface IdentifiableResourceReloadListener extends ResourceReloadListener {
public interface IdentifiableResourceReloadListener<T> extends ResourceReloadListener<T> {
/**
* @return The unique identifier of this listener.
*/
@ -44,22 +44,4 @@ public interface IdentifiableResourceReloadListener extends ResourceReloadListen
default Collection<Identifier> getFabricDependencies() {
return Collections.emptyList();
}
/**
* By default, resource reload listeners in Minecraft are all executed on
* the game's main thread while the game is paused. This means they do not
* need to provide any guarantees regarding their thread safety, or usage
* of resources potentially modified by other reload listeners.
*
* "Thread safety", in this context, refers simply to independence; namely
* whether or not, under the condition that all of its dependencies have
* already been processed, this resource reload listener can run without
* accessing or modifying areas it does not control in a non-thread-safe
* manner.
*
* @return Whether or not the listener can be executed in a thread-safe way.
*/
default boolean isListenerThreadSafe() {
return false;
}
}

View file

@ -28,7 +28,7 @@ public interface ResourceManagerHelper {
* Add a resource reload listener for a given registry.
* @param listener The resource reload listener.
*/
void addReloadListener(IdentifiableResourceReloadListener listener);
void addReloadListener(IdentifiableResourceReloadListener<?> listener);
/**
* Get the ResourceManagerHelper instance for a given resource type.

View file

@ -31,20 +31,20 @@ public class ResourceManagerHelperImpl implements ResourceManagerHelper {
private static final Map<ResourceType, ResourceManagerHelperImpl> registryMap = new HashMap<>();
private static final Logger LOGGER = LogManager.getLogger();
private final List<IdentifiableResourceReloadListener> addedListeners = new ArrayList<>();
private final List<IdentifiableResourceReloadListener<?>> addedListeners = new ArrayList<>();
public static ResourceManagerHelper get(ResourceType type) {
return registryMap.computeIfAbsent(type, (t) -> new ResourceManagerHelperImpl());
}
public static void sort(ResourceType type, List<ResourceReloadListener> listeners) {
public static void sort(ResourceType type, List<ResourceReloadListener<?>> listeners) {
ResourceManagerHelperImpl instance = registryMap.get(type);
if (instance != null) {
instance.sort(listeners);
}
}
protected void sort(List<ResourceReloadListener> listeners) {
protected void sort(List<ResourceReloadListener<?>> listeners) {
listeners.removeAll(addedListeners);
// General rules:
@ -53,7 +53,7 @@ public class ResourceManagerHelperImpl implements ResourceManagerHelper {
// trust them 100%. Only code doesn't lie.
// - We addReloadListener all custom listeners after vanilla listeners. Same reasons.
List<IdentifiableResourceReloadListener> listenersToAdd = Lists.newArrayList(addedListeners);
List<IdentifiableResourceReloadListener<?>> listenersToAdd = Lists.newArrayList(addedListeners);
Set<Identifier> resolvedIds = new HashSet<>();
for (ResourceReloadListener listener : listeners) {
if (listener instanceof IdentifiableResourceReloadListener) {
@ -65,7 +65,7 @@ public class ResourceManagerHelperImpl implements ResourceManagerHelper {
while (listeners.size() != lastSize) {
lastSize = listeners.size();
Iterator<IdentifiableResourceReloadListener> it = listenersToAdd.iterator();
Iterator<IdentifiableResourceReloadListener<?>> it = listenersToAdd.iterator();
while (it.hasNext()) {
IdentifiableResourceReloadListener listener = it.next();
if (resolvedIds.containsAll(listener.getFabricDependencies())) {
@ -82,7 +82,7 @@ public class ResourceManagerHelperImpl implements ResourceManagerHelper {
}
@Override
public void addReloadListener(IdentifiableResourceReloadListener listener) {
public void addReloadListener(IdentifiableResourceReloadListener<?> listener) {
addedListeners.add(listener);
}
}

View file

@ -41,15 +41,15 @@ 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 org.spongepowered.asm.mixin.transformer.meta.MixinInner;
import java.io.IOException;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.*;
@Mixin(SpriteAtlasTexture.class)
public abstract class MixinSpriteAtlasTexture {
// TODO
@Shadow
private static Logger LOGGER;
@Shadow
@ -61,21 +61,22 @@ public abstract class MixinSpriteAtlasTexture {
@Shadow
private int mipLevel;
@Shadow
/*@Shadow
public abstract Sprite getSprite(Identifier id);
@Shadow
public abstract void addSpriteToLoad(ResourceManager var1, Identifier var2);
@Redirect(method = "reload", at = @At(value = "NEW", target = "net/minecraft/client/texture/Sprite"))
// private Collection<Sprite> method_18164(ResourceManager resourceManager_1, Set<Identifier> set_1) {
@Redirect(method = "method_18164", at = @At(value = "NEW", target = "net/minecraft/client/texture/Sprite"))
public Sprite newSprite(Identifier id, class_1050 c, AnimationResourceMetadata animationMetadata) {
if (sprites.containsKey(id)) {
return sprites.get(id);
} else {
return new FabricSprite(id, c, animationMetadata);
}
}
} */
@Inject(at = @At("HEAD"), method = "build")
/* @Inject(at = @At("HEAD"), method = "build")
public void build(ResourceManager var1, Iterable<Identifier> var2, CallbackInfo info) {
this.sprites.clear();
}
@ -136,7 +137,7 @@ public abstract class MixinSpriteAtlasTexture {
throw new CrashException(report);
}
}
}
} */
@Inject(at = @At("HEAD"), method = "loadSprite", cancellable = true)
public void loadSprite(ResourceManager manager, Sprite sprite, CallbackInfoReturnable<Boolean> info) {

View file

@ -23,6 +23,7 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.network.ServerPlayerInteractionManager;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
@ -40,7 +41,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ServerPlayerInteractionManager.class)
public class MixinServerPlayerInteractionManager {
@Shadow
public World world;
public ServerWorld world;
@Shadow
public ServerPlayerEntity player;

View file

@ -25,13 +25,15 @@ 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.function.BooleanSupplier;
@Mixin(World.class)
public class MixinWorld {
@Shadow
private Profiler profiler;
@Inject(at = @At("RETURN"), method = "updateEntities")
public void updateEntities(CallbackInfo info) {
@Inject(at = @At("RETURN"), method = "tick")
public void tick(BooleanSupplier booleanSupplier, CallbackInfo info) {
TickEvent.tick(TickEvent.WORLD, (World) (Object) this, this.profiler);
}
}

View file

@ -16,6 +16,7 @@
package net.fabricmc.fabric.mixin.resources;
import com.google.common.collect.Lists;
import net.fabricmc.fabric.impl.resources.ResourceManagerHelperImpl;
import net.minecraft.resource.*;
import org.spongepowered.asm.mixin.Mixin;
@ -29,12 +30,15 @@ import java.util.List;
@Mixin(ReloadableResourceManagerImpl.class)
public class MixinReloadableResourceManagerImpl {
@Shadow
private List<ResourceReloadListener> listeners;
private List<ResourceReloadListener<?>> field_17935;
@Shadow
private List<ResourceReloadListener<?>> field_17936;
@Shadow
private ResourceType type;
@Inject(at = @At("HEAD"), method = "reload")
public void reload(List<ResourcePack> packs, CallbackInfo info) {
ResourceManagerHelperImpl.sort(type, listeners);
ResourceManagerHelperImpl.sort(type, field_17935);
ResourceManagerHelperImpl.sort(type, field_17936);
}
}

View file

@ -22,14 +22,26 @@ import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.minecraft.resource.ResourceManager;
import net.minecraft.resource.ResourceType;
import net.minecraft.util.Identifier;
import net.minecraft.util.profiler.Profiler;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.CompletableFuture;
public class ResourceReloadModClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
ResourceManagerHelper.get(ResourceType.ASSETS).addReloadListener(new IdentifiableResourceReloadListener() {
ResourceManagerHelper.get(ResourceType.ASSETS).addReloadListener(new IdentifiableResourceReloadListener<Void>() {
@Override
public CompletableFuture<Void> prepare(ResourceManager var1, Profiler var2) {
return null;
}
@Override
public void apply(ResourceManager var1, Void var2, Profiler var3) {
System.out.println("Reloading (should run as #2)");
}
@Override
public Identifier getFabricId() {
return new Identifier("fabric:rrmc2");
@ -39,26 +51,26 @@ public class ResourceReloadModClient implements ClientModInitializer {
public Collection<Identifier> getFabricDependencies() {
return Collections.singletonList(new Identifier("fabric:rrmc1"));
}
@Override
public void onResourceReload(ResourceManager var1) {
System.out.println("Reloading (should run as #2)");
}
});
ResourceManagerHelper.get(ResourceType.ASSETS).addReloadListener(new IdentifiableResourceReloadListener() {
ResourceManagerHelper.get(ResourceType.ASSETS).addReloadListener(new IdentifiableResourceReloadListener<Void>() {
@Override
public Identifier getFabricId() {
return new Identifier("fabric:rrmc1");
}
@Override
public void onResourceReload(ResourceManager var1) {
public CompletableFuture<Void> prepare(ResourceManager var1, Profiler var2) {
return null;
}
@Override
public void apply(ResourceManager var1, Void var2, Profiler var3) {
System.out.println("Reloading (should run as #1)");
}
});
ResourceManagerHelper.get(ResourceType.ASSETS).addReloadListener(new IdentifiableResourceReloadListener() {
ResourceManagerHelper.get(ResourceType.ASSETS).addReloadListener(new IdentifiableResourceReloadListener<Void>() {
@Override
public Identifier getFabricId() {
return new Identifier("fabric:rrmc_should_not_resolve");
@ -70,7 +82,12 @@ public class ResourceReloadModClient implements ClientModInitializer {
}
@Override
public void onResourceReload(ResourceManager var1) {
public CompletableFuture<Void> prepare(ResourceManager var1, Profiler var2) {
return null;
}
@Override
public void apply(ResourceManager var1, Void var2, Profiler var3) {
}
});
}