package net.minecraft.server; import com.mojang.brigadier.arguments.StringArgumentType; import java.io.IOException; import java.util.List; import java.util.function.Function; import java.util.function.Supplier; import javax.annotation.Nullable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ResourcePackLoader implements AutoCloseable { private static final Logger LOGGER = LogManager.getLogger(); private static final ResourcePackInfo b = new ResourcePackInfo((new ChatMessage("resourcePack.broken_assets", new Object[0])).a(new EnumChatFormat[]{EnumChatFormat.RED, EnumChatFormat.ITALIC}), SharedConstants.getGameVersion().getPackVersion()); private final String c; private final Supplier<IResourcePack> d; private final IChatBaseComponent e; private final IChatBaseComponent f; private final EnumResourcePackVersion g; private final ResourcePackLoader.Position h; private final boolean i; private final boolean j; @Nullable public static <T extends ResourcePackLoader> T a(String s, boolean flag, Supplier<IResourcePack> supplier, ResourcePackLoader.b<T> resourcepackloader_b, ResourcePackLoader.Position resourcepackloader_position) { try { IResourcePack iresourcepack = (IResourcePack) supplier.get(); Throwable throwable = null; ResourcePackLoader resourcepackloader; try { ResourcePackInfo resourcepackinfo = (ResourcePackInfo) iresourcepack.a((ResourcePackMetaParser) ResourcePackInfo.a); if (flag && resourcepackinfo == null) { ResourcePackLoader.LOGGER.error("Broken/missing pack.mcmeta detected, fudging it into existance. Please check that your launcher has downloaded all assets for the game correctly!"); resourcepackinfo = ResourcePackLoader.b; } if (resourcepackinfo == null) { ResourcePackLoader.LOGGER.warn("Couldn't find pack meta for pack {}", s); return null; } resourcepackloader = resourcepackloader_b.create(s, flag, supplier, iresourcepack, resourcepackinfo, resourcepackloader_position); } catch (Throwable throwable1) { throwable = throwable1; throw throwable1; } finally { if (iresourcepack != null) { if (throwable != null) { try { iresourcepack.close(); } catch (Throwable throwable2) { throwable.addSuppressed(throwable2); } } else { iresourcepack.close(); } } } return resourcepackloader; } catch (IOException ioexception) { ResourcePackLoader.LOGGER.warn("Couldn't get pack info for: {}", ioexception.toString()); return null; } } public ResourcePackLoader(String s, boolean flag, Supplier<IResourcePack> supplier, IChatBaseComponent ichatbasecomponent, IChatBaseComponent ichatbasecomponent1, EnumResourcePackVersion enumresourcepackversion, ResourcePackLoader.Position resourcepackloader_position, boolean flag1) { this.c = s; this.d = supplier; this.e = ichatbasecomponent; this.f = ichatbasecomponent1; this.g = enumresourcepackversion; this.i = flag; this.h = resourcepackloader_position; this.j = flag1; } public ResourcePackLoader(String s, boolean flag, Supplier<IResourcePack> supplier, IResourcePack iresourcepack, ResourcePackInfo resourcepackinfo, ResourcePackLoader.Position resourcepackloader_position) { this(s, flag, supplier, new ChatComponentText(iresourcepack.a()), resourcepackinfo.a(), EnumResourcePackVersion.a(resourcepackinfo.b()), resourcepackloader_position, false); } public IChatBaseComponent a(boolean flag) { return ChatComponentUtils.a((IChatBaseComponent) (new ChatComponentText(this.c))).a((chatmodifier) -> { chatmodifier.setColor(flag ? EnumChatFormat.GREEN : EnumChatFormat.RED).setInsertion(StringArgumentType.escapeIfRequired(this.c)).setChatHoverable(new ChatHoverable(ChatHoverable.EnumHoverAction.SHOW_TEXT, (new ChatComponentText("")).addSibling(this.e).a("\n").addSibling(this.f))); }); } public EnumResourcePackVersion c() { return this.g; } public IResourcePack d() { return (IResourcePack) this.d.get(); } public String e() { return this.c; } public boolean f() { return this.i; } public boolean g() { return this.j; } public ResourcePackLoader.Position h() { return this.h; } public boolean equals(Object object) { if (this == object) { return true; } else if (!(object instanceof ResourcePackLoader)) { return false; } else { ResourcePackLoader resourcepackloader = (ResourcePackLoader) object; return this.c.equals(resourcepackloader.c); } } public int hashCode() { return this.c.hashCode(); } public void close() {} public static enum Position { TOP, BOTTOM; private Position() {} public <T, P extends ResourcePackLoader> int a(List<T> list, T t0, Function<T, P> function, boolean flag) { ResourcePackLoader.Position resourcepackloader_position = flag ? this.a() : this; ResourcePackLoader resourcepackloader; int i; if (resourcepackloader_position == ResourcePackLoader.Position.BOTTOM) { for (i = 0; i < list.size(); ++i) { resourcepackloader = (ResourcePackLoader) function.apply(list.get(i)); if (!resourcepackloader.g() || resourcepackloader.h() != this) { break; } } list.add(i, t0); return i; } else { for (i = list.size() - 1; i >= 0; --i) { resourcepackloader = (ResourcePackLoader) function.apply(list.get(i)); if (!resourcepackloader.g() || resourcepackloader.h() != this) { break; } } list.add(i + 1, t0); return i + 1; } } public ResourcePackLoader.Position a() { return this == ResourcePackLoader.Position.TOP ? ResourcePackLoader.Position.BOTTOM : ResourcePackLoader.Position.TOP; } } @FunctionalInterface public interface b<T extends ResourcePackLoader> { @Nullable T create(String s, boolean flag, Supplier<IResourcePack> supplier, IResourcePack iresourcepack, ResourcePackInfo resourcepackinfo, ResourcePackLoader.Position resourcepackloader_position); } }