Enchantment Menu mixin, Tag API rename
This commit is contained in:
parent
834389712b
commit
8472ad3c1d
7 changed files with 154 additions and 13 deletions
|
@ -5,7 +5,7 @@ import net.fabricmc.api.ModInitializer;
|
|||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import ru.bclib.util.Logger;
|
||||
import ru.bclib.world.surface.BCLSurfaceBuilders;
|
||||
import ru.bclib.api.BCLibTags;
|
||||
import ru.bclib.api.TagAPI;
|
||||
|
||||
public class BCLib implements ModInitializer {
|
||||
public static final String MOD_ID = "bclib";
|
||||
|
@ -14,7 +14,7 @@ public class BCLib implements ModInitializer {
|
|||
@Override
|
||||
public void onInitialize() {
|
||||
BCLSurfaceBuilders.register();
|
||||
BCLibTags.init();
|
||||
TagAPI.init();
|
||||
}
|
||||
|
||||
public static boolean isDevEnvironment() {
|
||||
|
|
|
@ -16,7 +16,7 @@ import net.minecraft.world.level.block.Blocks;
|
|||
import ru.bclib.BCLib;
|
||||
import ru.bclib.util.TagHelper;
|
||||
|
||||
public class BCLibTags {
|
||||
public class TagAPI {
|
||||
// Block Tags
|
||||
public static final Tag.Named<Block> BOOKSHELVES = makeCommonBlockTag("bookshelves");
|
||||
public static final Tag.Named<Block> GEN_TERRAIN = makeBlockTag(BCLib.MOD_ID, "gen_terrain");
|
|
@ -16,7 +16,7 @@ import net.minecraft.world.level.biome.Biome.BiomeCategory;
|
|||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import ru.bclib.api.BCLibTags;
|
||||
import ru.bclib.api.TagAPI;
|
||||
import ru.bclib.api.BiomeAPI;
|
||||
import ru.bclib.api.BonemealAPI;
|
||||
import ru.bclib.util.BlocksHelper;
|
||||
|
@ -34,7 +34,7 @@ public class BoneMealItemMixin {
|
|||
BlockPos offseted = blockPos.relative(context.getClickedFace());
|
||||
boolean endBiome = world.getBiome(offseted).getBiomeCategory() == BiomeCategory.THEEND;
|
||||
|
||||
if (world.getBlockState(blockPos).is(BCLibTags.END_GROUND)) {
|
||||
if (world.getBlockState(blockPos).is(TagAPI.END_GROUND)) {
|
||||
boolean consume = false;
|
||||
if (world.getBlockState(blockPos).is(Blocks.END_STONE)) {
|
||||
BlockState nylium = bclib_getNylium(world, blockPos);
|
||||
|
|
140
src/main/java/ru/bclib/mixin/common/EnchantmentMenuMixin.java
Normal file
140
src/main/java/ru/bclib/mixin/common/EnchantmentMenuMixin.java
Normal file
|
@ -0,0 +1,140 @@
|
|||
package ru.bclib.mixin.common;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraft.world.inventory.ContainerLevelAccess;
|
||||
import net.minecraft.world.inventory.DataSlot;
|
||||
import net.minecraft.world.inventory.EnchantmentMenu;
|
||||
import net.minecraft.world.inventory.MenuType;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.enchantment.EnchantmentHelper;
|
||||
import net.minecraft.world.item.enchantment.EnchantmentInstance;
|
||||
import ru.bclib.api.TagAPI;
|
||||
|
||||
@Mixin(EnchantmentMenu.class)
|
||||
public abstract class EnchantmentMenuMixin extends AbstractContainerMenu {
|
||||
@Final
|
||||
@Shadow
|
||||
private Container enchantSlots;
|
||||
|
||||
@Final
|
||||
@Shadow
|
||||
private ContainerLevelAccess access;
|
||||
|
||||
@Final
|
||||
@Shadow
|
||||
private Random random;
|
||||
|
||||
@Final
|
||||
@Shadow
|
||||
private DataSlot enchantmentSeed;
|
||||
|
||||
@Shadow
|
||||
@Final
|
||||
public int[] costs;
|
||||
|
||||
@Shadow
|
||||
@Final
|
||||
public int[] enchantClue;
|
||||
|
||||
@Shadow
|
||||
@Final
|
||||
public int[] levelClue;
|
||||
|
||||
protected EnchantmentMenuMixin(MenuType<?> type, int syncId) {
|
||||
super(type, syncId);
|
||||
}
|
||||
|
||||
@Inject(method = "slotsChanged", at = @At("HEAD"), cancellable = true)
|
||||
private void be_slotsChanged(Container inventory, CallbackInfo info) {
|
||||
if (inventory == this.enchantSlots) {
|
||||
ItemStack itemStack = inventory.getItem(0);
|
||||
if (!itemStack.isEmpty() && itemStack.isEnchantable()) {
|
||||
this.access.execute((world, blockPos) -> {
|
||||
int i = 0;
|
||||
|
||||
int j;
|
||||
for (j = -1; j <= 1; ++j) {
|
||||
for (int k = -1; k <= 1; ++k) {
|
||||
if ((j != 0 || k != 0) && world.isEmptyBlock(blockPos.offset(k, 0, j)) && world.isEmptyBlock(blockPos.offset(k, 1, j))) {
|
||||
if (world.getBlockState(blockPos.offset(k * 2, 0, j * 2)).is(TagAPI.BOOKSHELVES)) {
|
||||
++i;
|
||||
}
|
||||
|
||||
if (world.getBlockState(blockPos.offset(k * 2, 1, j * 2)).is(TagAPI.BOOKSHELVES)) {
|
||||
++i;
|
||||
}
|
||||
|
||||
if (k != 0 && j != 0) {
|
||||
if (world.getBlockState(blockPos.offset(k * 2, 0, j)).is(TagAPI.BOOKSHELVES)) {
|
||||
++i;
|
||||
}
|
||||
|
||||
if (world.getBlockState(blockPos.offset(k * 2, 1, j)).is(TagAPI.BOOKSHELVES)) {
|
||||
++i;
|
||||
}
|
||||
|
||||
if (world.getBlockState(blockPos.offset(k, 0, j * 2)).is(TagAPI.BOOKSHELVES)) {
|
||||
++i;
|
||||
}
|
||||
|
||||
if (world.getBlockState(blockPos.offset(k, 1, j * 2)).is(TagAPI.BOOKSHELVES)) {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
random.setSeed(enchantmentSeed.get());
|
||||
|
||||
for (j = 0; j < 3; ++j) {
|
||||
costs[j] = EnchantmentHelper.getEnchantmentCost(this.random, j, i, itemStack);
|
||||
enchantClue[j] = -1;
|
||||
levelClue[j] = -1;
|
||||
if (costs[j] < j + 1) {
|
||||
costs[j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
for (j = 0; j < 3; ++j) {
|
||||
if (this.costs[j] > 0) {
|
||||
List<EnchantmentInstance> list = this.getEnchantmentList(itemStack, j, this.costs[j]);
|
||||
if (list != null && !list.isEmpty()) {
|
||||
EnchantmentInstance enchantmentLevelEntry = (EnchantmentInstance) list.get(this.random.nextInt(list.size()));
|
||||
enchantClue[j] = Registry.ENCHANTMENT.getId(enchantmentLevelEntry.enchantment);
|
||||
levelClue[j] = enchantmentLevelEntry.level;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
broadcastChanges();
|
||||
});
|
||||
}
|
||||
else {
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
costs[i] = 0;
|
||||
enchantClue[i] = -1;
|
||||
levelClue[i] = -1;
|
||||
}
|
||||
}
|
||||
info.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Shadow
|
||||
private List<EnchantmentInstance> getEnchantmentList(ItemStack stack, int slot, int level) {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -27,7 +27,7 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
|||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
||||
import net.minecraft.world.level.material.Material;
|
||||
import ru.bclib.api.BCLibTags;
|
||||
import ru.bclib.api.TagAPI;
|
||||
|
||||
public class StructureHelper {
|
||||
private static final Direction[] DIR = BlocksHelper.makeHorizontal();
|
||||
|
@ -264,7 +264,7 @@ public class StructureHelper {
|
|||
|
||||
private static boolean isTerrainNear(WorldGenLevel world, BlockPos pos) {
|
||||
for (Direction dir: BlocksHelper.DIRECTIONS) {
|
||||
if (world.getBlockState(pos.relative(dir)).is(BCLibTags.GEN_TERRAIN)) {
|
||||
if (world.getBlockState(pos.relative(dir)).is(TagAPI.GEN_TERRAIN)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -344,7 +344,7 @@ public class StructureHelper {
|
|||
private static boolean ignore(BlockState state) {
|
||||
return state.getMaterial().isReplaceable() ||
|
||||
!state.getFluidState().isEmpty() ||
|
||||
state.is(BCLibTags.END_GROUND) ||
|
||||
state.is(TagAPI.END_GROUND) ||
|
||||
state.is(BlockTags.LOGS) ||
|
||||
state.is(BlockTags.LEAVES) ||
|
||||
state.getMaterial().equals(Material.PLANT) ||
|
||||
|
@ -362,7 +362,7 @@ public class StructureHelper {
|
|||
for (int y = bounds.y1; y >= bounds.y0; y--) {
|
||||
mut.setY(y);
|
||||
BlockState state = world.getBlockState(mut);
|
||||
if (state.is(BCLibTags.END_GROUND) && !world.getBlockState(mut.above()).getMaterial().isSolidBlocking()) {
|
||||
if (state.is(TagAPI.END_GROUND) && !world.getBlockState(mut.above()).getMaterial().isSolidBlocking()) {
|
||||
BlocksHelper.setWithoutUpdate(world, mut, top);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox;
|
|||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
||||
import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration;
|
||||
import ru.bclib.api.BCLibTags;
|
||||
import ru.bclib.api.TagAPI;
|
||||
import ru.bclib.api.BiomeAPI;
|
||||
import ru.bclib.util.BlocksHelper;
|
||||
import ru.bclib.world.processors.DestructionStructureProcessor;
|
||||
|
@ -124,11 +124,11 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
|||
mut.setZ(z);
|
||||
mut.setY(surfMax);
|
||||
BlockState state = world.getBlockState(mut);
|
||||
if (!state.is(BCLibTags.GEN_TERRAIN) && state.isFaceSturdy(world, mut, Direction.DOWN)) {
|
||||
if (!state.is(TagAPI.GEN_TERRAIN) && state.isFaceSturdy(world, mut, Direction.DOWN)) {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
mut.setY(mut.getY() - 1);
|
||||
BlockState stateSt = world.getBlockState(mut);
|
||||
if (!stateSt.is(BCLibTags.GEN_TERRAIN)) {
|
||||
if (!stateSt.is(TagAPI.GEN_TERRAIN)) {
|
||||
if (merge == TerrainMerge.SURFACE) {
|
||||
SurfaceBuilderConfiguration config = world.getBiome(mut).getGenerationSettings().getSurfaceBuilderConfig();
|
||||
boolean isTop = mut.getY() == surfMax && state.getMaterial().isSolidBlocking();
|
||||
|
@ -140,7 +140,7 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
|||
}
|
||||
}
|
||||
else {
|
||||
if (stateSt.is(BCLibTags.END_GROUND) && state.getMaterial().isSolidBlocking()) {
|
||||
if (stateSt.is(TagAPI.END_GROUND) && state.getMaterial().isSolidBlocking()) {
|
||||
if (merge == TerrainMerge.SURFACE) {
|
||||
SurfaceBuilderConfiguration config = world.getBiome(mut).getGenerationSettings()
|
||||
.getSurfaceBuilderConfig();
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"ComposterBlockAccessor",
|
||||
"PotionBrewingAccessor",
|
||||
"RecipeManagerAccessor",
|
||||
"EnchantmentMenuMixin",
|
||||
"RecipeManagerMixin",
|
||||
"BoneMealItemMixin",
|
||||
"TagLoaderMixin"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue