Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / GameTestHarnessRunner.java
package net.minecraft.server;

import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Streams;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;

public class GameTestHarnessRunner {

    public static GameTestHarnessITestReporter a = new GameTestHarnessLogger();

    public static void a(GameTestHarnessInfo gametestharnessinfo, GameTestHarnessTicker gametestharnessticker) {
        gametestharnessinfo.a();
        gametestharnessticker.a(gametestharnessinfo);
        gametestharnessinfo.a(new GameTestHarnessListener() {
            @Override
            public void a(GameTestHarnessInfo gametestharnessinfo1) {
                GameTestHarnessRunner.b(gametestharnessinfo1, Blocks.LIGHT_GRAY_STAINED_GLASS);
            }

            @Override
            public void c(GameTestHarnessInfo gametestharnessinfo1) {
                GameTestHarnessRunner.b(gametestharnessinfo1, gametestharnessinfo1.q() ? Blocks.RED_STAINED_GLASS : Blocks.ORANGE_STAINED_GLASS);
                GameTestHarnessRunner.b(gametestharnessinfo1, SystemUtils.d(gametestharnessinfo1.n()));
                GameTestHarnessRunner.c(gametestharnessinfo1);
            }
        });
        gametestharnessinfo.a(2);
    }

    public static Collection<GameTestHarnessInfo> a(Collection<GameTestHarnessBatch> collection, BlockPosition blockposition, WorldServer worldserver, GameTestHarnessTicker gametestharnessticker) {
        GameTestHarnessBatchRunner gametestharnessbatchrunner = new GameTestHarnessBatchRunner(collection, blockposition, worldserver, gametestharnessticker);

        gametestharnessbatchrunner.b();
        return gametestharnessbatchrunner.a();
    }

    public static Collection<GameTestHarnessInfo> b(Collection<GameTestHarnessTestFunction> collection, BlockPosition blockposition, WorldServer worldserver, GameTestHarnessTicker gametestharnessticker) {
        return a(a(collection), blockposition, worldserver, gametestharnessticker);
    }

    public static Collection<GameTestHarnessBatch> a(Collection<GameTestHarnessTestFunction> collection) {
        Map<String, Collection<GameTestHarnessTestFunction>> map = Maps.newHashMap();

        collection.forEach((gametestharnesstestfunction) -> {
            String s = gametestharnesstestfunction.e();
            Collection<GameTestHarnessTestFunction> collection1 = (Collection) map.computeIfAbsent(s, (s1) -> {
                return Lists.newArrayList();
            });

            collection1.add(gametestharnesstestfunction);
        });
        return (Collection) map.keySet().stream().flatMap((s) -> {
            Collection<GameTestHarnessTestFunction> collection1 = (Collection) map.get(s);
            Consumer<WorldServer> consumer = GameTestHarnessRegistry.c(s);
            AtomicInteger atomicinteger = new AtomicInteger();

            return Streams.stream(Iterables.partition(collection1, 100)).map((list) -> {
                return new GameTestHarnessBatch(s + ":" + atomicinteger.incrementAndGet(), collection1, consumer);
            });
        }).collect(Collectors.toList());
    }

    private static void c(GameTestHarnessInfo gametestharnessinfo) {
        Throwable throwable = gametestharnessinfo.n();
        String s = gametestharnessinfo.c() + " failed! " + SystemUtils.d(throwable);

        a(gametestharnessinfo.g(), EnumChatFormat.RED, s);
        if (throwable instanceof GameTestHarnessAssertionPosition) {
            GameTestHarnessAssertionPosition gametestharnessassertionposition = (GameTestHarnessAssertionPosition) throwable;

            a(gametestharnessinfo.g(), gametestharnessassertionposition.c(), gametestharnessassertionposition.a());
        }

        GameTestHarnessRunner.a.a(gametestharnessinfo);
    }

    private static void b(GameTestHarnessInfo gametestharnessinfo, Block block) {
        WorldServer worldserver = gametestharnessinfo.g();
        BlockPosition blockposition = gametestharnessinfo.d();
        BlockPosition blockposition1 = blockposition.b(-1, -1, -1);

        worldserver.setTypeUpdate(blockposition1, Blocks.BEACON.getBlockData());
        BlockPosition blockposition2 = blockposition1.b(0, 1, 0);

        worldserver.setTypeUpdate(blockposition2, block.getBlockData());

        for (int i = -1; i <= 1; ++i) {
            for (int j = -1; j <= 1; ++j) {
                BlockPosition blockposition3 = blockposition1.b(i, -1, j);

                worldserver.setTypeUpdate(blockposition3, Blocks.IRON_BLOCK.getBlockData());
            }
        }

    }

    private static void b(GameTestHarnessInfo gametestharnessinfo, String s) {
        WorldServer worldserver = gametestharnessinfo.g();
        BlockPosition blockposition = gametestharnessinfo.d();
        BlockPosition blockposition1 = blockposition.b(-1, 1, -1);

        worldserver.setTypeUpdate(blockposition1, Blocks.LECTERN.getBlockData());
        IBlockData iblockdata = worldserver.getType(blockposition1);
        ItemStack itemstack = a(gametestharnessinfo.c(), gametestharnessinfo.q(), s);

        BlockLectern.a((World) worldserver, blockposition1, iblockdata, itemstack);
    }

    private static ItemStack a(String s, boolean flag, String s1) {
        ItemStack itemstack = new ItemStack(Items.WRITABLE_BOOK);
        NBTTagList nbttaglist = new NBTTagList();
        StringBuffer stringbuffer = new StringBuffer();

        Arrays.stream(s.split("\\.")).forEach((s2) -> {
            stringbuffer.append(s2).append('\n');
        });
        if (!flag) {
            stringbuffer.append("(optional)\n");
        }

        stringbuffer.append("-------------------\n");
        nbttaglist.add(NBTTagString.a(stringbuffer.toString() + s1));
        itemstack.a("pages", (NBTBase) nbttaglist);
        return itemstack;
    }

    private static void a(WorldServer worldserver, EnumChatFormat enumchatformat, String s) {
        worldserver.a((entityplayer) -> {
            return true;
        }).forEach((entityplayer) -> {
            entityplayer.sendMessage((new ChatComponentText(s)).a(enumchatformat));
        });
    }

    public static void a(WorldServer worldserver) {
        PacketDebug.a(worldserver);
    }

    private static void a(WorldServer worldserver, BlockPosition blockposition, String s) {
        PacketDebug.a(worldserver, blockposition, s, -2130771968, Integer.MAX_VALUE);
    }

    public static void a(WorldServer worldserver, BlockPosition blockposition, GameTestHarnessTicker gametestharnessticker, int i) {
        gametestharnessticker.a();
        BlockPosition blockposition1 = blockposition.b(-i, 0, -i);
        BlockPosition blockposition2 = blockposition.b(i, 0, i);

        BlockPosition.b(blockposition1, blockposition2).filter((blockposition3) -> {
            return worldserver.getType(blockposition3).getBlock() == Blocks.STRUCTURE_BLOCK;
        }).forEach((blockposition3) -> {
            TileEntityStructure tileentitystructure = (TileEntityStructure) worldserver.getTileEntity(blockposition3);
            BlockPosition blockposition4 = tileentitystructure.getPosition();
            StructureBoundingBox structureboundingbox = GameTestHarnessStructures.a(blockposition4, tileentitystructure.j(), 2);

            GameTestHarnessStructures.a(structureboundingbox, blockposition4.getY(), worldserver);
        });
    }
}