Skip to content
Merged
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
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package org.cyclops.colossalchests.gametest;

import com.google.common.collect.Sets;
import net.minecraft.advancements.AdvancementHolder;
import net.minecraft.advancements.CriteriaTriggers;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.gametest.framework.GameTest;
import net.minecraft.gametest.framework.GameTestHelper;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.EntityType;
Expand All @@ -19,6 +23,7 @@
import net.minecraft.world.level.block.entity.HopperBlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.Vec3;
import org.cyclops.colossalchests.Reference;
import org.cyclops.colossalchests.RegistryEntries;
import org.cyclops.colossalchests.block.*;
Expand Down Expand Up @@ -1141,4 +1146,130 @@ protected boolean isFabric() {
}
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementRoot(GameTestHelper helper) {
ServerPlayer serverPlayer = makeMockServerPlayer(helper);
serverPlayer.getInventory().add(new ItemStack(Items.CHEST));
CriteriaTriggers.INVENTORY_CHANGED.trigger(serverPlayer, serverPlayer.getInventory(), new ItemStack(Items.CHEST));

helper.succeedWhen(() -> assertAdvancementDone(helper, serverPlayer, ResourceLocation.parse("colossalchests:root")));
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementUncolossal(GameTestHelper helper) {
ServerPlayer serverPlayer = makeMockServerPlayer(helper);
placeBlockAsServerPlayer(helper, serverPlayer, POS, RegistryEntries.BLOCK_UNCOLOSSAL_CHEST.value());

helper.succeedWhen(() -> assertAdvancementDone(helper, serverPlayer, ResourceLocation.parse("colossalchests:uncolossal")));
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementBaseWood(GameTestHelper helper) {
testAdvancementBase(helper, ChestMaterial.WOOD, "colossalchests:base/wood");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementBaseCopper(GameTestHelper helper) {
testAdvancementBase(helper, ChestMaterial.COPPER, "colossalchests:base/copper");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementBaseIron(GameTestHelper helper) {
testAdvancementBase(helper, ChestMaterial.IRON, "colossalchests:base/iron");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementBaseSilver(GameTestHelper helper) {
testAdvancementBase(helper, ChestMaterial.SILVER, "colossalchests:base/silver");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementBaseGold(GameTestHelper helper) {
testAdvancementBase(helper, ChestMaterial.GOLD, "colossalchests:base/gold");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementBaseDiamond(GameTestHelper helper) {
testAdvancementBase(helper, ChestMaterial.DIAMOND, "colossalchests:base/diamond");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementBaseObsidian(GameTestHelper helper) {
testAdvancementBase(helper, ChestMaterial.OBSIDIAN, "colossalchests:base/obsidian");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementSizeWood(GameTestHelper helper) {
testAdvancementSize(helper, ChestMaterial.WOOD, "colossalchests:size/wood");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementSizeCopper(GameTestHelper helper) {
testAdvancementSize(helper, ChestMaterial.COPPER, "colossalchests:size/copper");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementSizeIron(GameTestHelper helper) {
testAdvancementSize(helper, ChestMaterial.IRON, "colossalchests:size/iron");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementSizeSilver(GameTestHelper helper) {
testAdvancementSize(helper, ChestMaterial.SILVER, "colossalchests:size/silver");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementSizeGold(GameTestHelper helper) {
testAdvancementSize(helper, ChestMaterial.GOLD, "colossalchests:size/gold");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementSizeDiamond(GameTestHelper helper) {
testAdvancementSize(helper, ChestMaterial.DIAMOND, "colossalchests:size/diamond");
}

@GameTest(template = TEMPLATE_EMPTY)
public void testAdvancementSizeObsidian(GameTestHelper helper) {
testAdvancementSize(helper, ChestMaterial.OBSIDIAN, "colossalchests:size/obsidian");
}

private void testAdvancementBase(GameTestHelper helper, ChestMaterial material, String advancementId) {
BlockPos excludedWall = POS.offset(1, 0, 0);
createChest(helper, POS, material, 2, Sets.newHashSet(excludedWall));
ServerPlayer serverPlayer = makeMockServerPlayer(helper);
placeBlockAsServerPlayer(helper, serverPlayer, excludedWall, material.getBlockWall());

helper.succeedWhen(() -> assertAdvancementDone(helper, serverPlayer, ResourceLocation.parse(advancementId)));
}

private void testAdvancementSize(GameTestHelper helper, ChestMaterial material, String advancementId) {
BlockPos chestStart = BlockPos.ZERO;
BlockPos excludedWall = chestStart.offset(9, 0, 0);
createChest(helper, chestStart, material, 10, Sets.newHashSet(excludedWall));
ServerPlayer serverPlayer = makeMockServerPlayer(helper);
placeBlockAsServerPlayer(helper, serverPlayer, excludedWall, material.getBlockWall());

helper.succeedWhen(() -> assertAdvancementDone(helper, serverPlayer, ResourceLocation.parse(advancementId)));
}

@SuppressWarnings("removal")
private ServerPlayer makeMockServerPlayer(GameTestHelper helper) {
return helper.makeMockServerPlayerInLevel();
}

private void placeBlockAsServerPlayer(GameTestHelper helper, ServerPlayer serverPlayer, BlockPos pos, Block block) {
ItemStack itemStack = new ItemStack(block);
serverPlayer.setItemInHand(InteractionHand.MAIN_HAND, itemStack);
itemStack.useOn(new UseOnContext(serverPlayer, InteractionHand.MAIN_HAND,
new BlockHitResult(Vec3.atCenterOf(helper.absolutePos(pos)), Direction.DOWN, helper.absolutePos(pos), false)));
}

private void assertAdvancementDone(GameTestHelper helper, ServerPlayer player, ResourceLocation advancementId) {
AdvancementHolder holder = helper.getLevel().getServer().getAdvancements().get(advancementId);
helper.assertTrue(holder != null, "Advancement " + advancementId + " not found");
helper.assertTrue(
player.getAdvancements().getOrStartProgress(holder).isDone(),
"Advancement " + advancementId + " has not been obtained");
}

}