Skip to content

Commit

Permalink
wip: Port to Minecraft 1.21
Browse files Browse the repository at this point in the history
  • Loading branch information
BlayTheNinth committed Jul 3, 2024
1 parent 6baa927 commit a93bb19
Show file tree
Hide file tree
Showing 46 changed files with 408 additions and 364 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package net.blay09.mods.excompressum;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.mojang.datafixers.util.Function3;
import net.blay09.mods.balm.api.Balm;
import net.blay09.mods.balm.api.proxy.SidedProxy;
import net.blay09.mods.excompressum.api.ExCompressumAPI;
Expand All @@ -21,8 +18,6 @@
import net.blay09.mods.excompressum.registry.ExRegistries;
import net.blay09.mods.excompressum.registry.ModRecipeTypes;
import net.blay09.mods.excompressum.registry.autosieveskin.AutoSieveSkinRegistry;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.storage.loot.LootTable;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

Expand All @@ -32,7 +27,6 @@ public class ExCompressum {
public static final Logger logger = LogManager.getLogger(MOD_ID);

public static SidedProxy<CommonProxy> proxy = Balm.sidedProxy("net.blay09.mods.excompressum.CommonProxy", "net.blay09.mods.excompressum.client.ClientProxy");
public static Function3<Gson, ResourceLocation, JsonElement, LootTable> lootTableLoader;

public static void initialize() {
ExCompressumAPI.__setupAPI(new InternalMethodsImpl());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.blay09.mods.excompressum.api.recipe;

import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.storage.loot.LootTable;

Expand All @@ -9,6 +8,4 @@ public interface CompressedHammerRecipe {
Ingredient getIngredient();

LootTable getLootTable();

ResourceLocation getRecipeId();
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.blay09.mods.excompressum.api.recipe;

import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.storage.loot.LootTable;

Expand All @@ -9,6 +8,4 @@ public interface HammerRecipe {
Ingredient getIngredient();

LootTable getLootTable();

ResourceLocation getRecipeId();
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package net.blay09.mods.excompressum.api.recipe;

import net.blay09.mods.excompressum.api.sievemesh.CommonMeshType;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.storage.loot.LootTable;

Expand All @@ -13,10 +12,6 @@ public interface HeavySieveRecipe {

LootTable getLootTable();

ResourceLocation getRecipeId();

CommonMeshType getMinimumMesh();

Set<CommonMeshType> getMeshes();

boolean isWaterlogged();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,6 @@ public interface SieveRecipe {

LootTable getLootTable();

ResourceLocation getRecipeId();

CommonMeshType getMinimumMesh();

Set<CommonMeshType> getMeshes();

boolean isWaterlogged();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,33 @@
package net.blay09.mods.excompressum.api.sievemesh;

public enum CommonMeshType {
import io.netty.buffer.ByteBuf;
import net.minecraft.core.NonNullList;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.util.ByIdMap;
import net.minecraft.util.StringRepresentable;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.function.IntFunction;

public enum CommonMeshType implements StringRepresentable {
STRING,
FLINT,
IRON,
GOLD,
DIAMOND,
EMERALD,
NETHERITE
NETHERITE;

private static final IntFunction<CommonMeshType> BY_ID = ByIdMap.continuous(CommonMeshType::ordinal, values(), ByIdMap.OutOfBoundsStrategy.ZERO);
public static final StringRepresentable.EnumCodec<CommonMeshType> CODEC = StringRepresentable.fromEnum(CommonMeshType::values);
public static final StreamCodec<ByteBuf, CommonMeshType> STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, CommonMeshType::ordinal);
public static final StreamCodec<ByteBuf, List<CommonMeshType>> LIST_STREAM_CODEC = STREAM_CODEC.apply(ByteBufCodecs.collection(ArrayList::new));

@Override
public String getSerializedName() {
return name().toLowerCase(Locale.ROOT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ public class SieveMeshRegistryEntry {
private final ItemStack itemStack;
private final Object backingMesh;

private int meshLevel;
private boolean isHeavy;
private String modelName;

Expand All @@ -23,14 +22,6 @@ public ItemStack getItemStack() {
return itemStack;
}

public int getMeshLevel() {
return meshLevel;
}

public void setMeshLevel(int meshLevel) {
this.meshLevel = meshLevel;
}

public boolean isHeavy() {
return isHeavy;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
public class LootTableEntry {
private final ItemStack itemStack;
private final NumberProvider countRange;
private final float baseChance;
private final NumberProvider baseChance;

public LootTableEntry(ItemStack itemStack, NumberProvider countRange, float baseChance) {
public LootTableEntry(ItemStack itemStack, NumberProvider countRange, NumberProvider baseChance) {
this.itemStack = itemStack;
this.countRange = countRange;
this.baseChance = baseChance;
Expand All @@ -22,7 +22,7 @@ public NumberProvider getCountRange() {
return countRange;
}

public float getBaseChance() {
public NumberProvider getBaseChance() {
return baseChance;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.google.common.collect.ArrayListMultimap;
import net.blay09.mods.balm.api.Balm;
import net.blay09.mods.excompressum.ExCompressum;
import net.blay09.mods.excompressum.CommonLootTableAccessor;
import net.blay09.mods.excompressum.mixin.*;
import net.minecraft.core.component.TypedDataComponent;
import net.minecraft.core.registries.BuiltInRegistries;
Expand All @@ -25,11 +24,13 @@
import net.minecraft.world.level.storage.loot.providers.number.NumberProvider;

import org.jetbrains.annotations.Nullable;

import java.util.*;

public class LootTableUtils {

private static final LootContextParam<ItemStack> SOURCE_STACK = new LootContextParam<>(ResourceLocation.fromNamespaceAndPath(ExCompressum.MOD_ID, "source_stack"));
private static final LootContextParam<ItemStack> SOURCE_STACK = new LootContextParam<>(ResourceLocation.fromNamespaceAndPath(ExCompressum.MOD_ID,
"source_stack"));

public static boolean isLootTableEmpty(@Nullable LootTable lootTable) {
if (lootTable == null) {
Expand All @@ -45,13 +46,13 @@ public static List<LootTableEntry> getLootTableEntries(@Nullable LootTable lootT
}

List<LootTableEntry> result = new ArrayList<>();
LootPool[] pools = ((CommonLootTableAccessor) lootTable).balm_getPools();
for (LootPool pool : pools) {
float poolBaseChance = getBaseChance(pool);
LootPoolEntryContainer[] entries = ((LootPoolAccessor) pool).getEntries();
final var pools = ((LootTableAccessor) lootTable).getPools();
for (final var pool : pools) {
final var poolBaseChance = getBaseChance(pool);
final var entries = ((LootPoolAccessor) pool).getEntries();
for (LootPoolEntryContainer entry : entries) {
float entryBaseChance = getBaseChance(entry);
float baseChance = entryBaseChance > 0 ? entryBaseChance : poolBaseChance;
final var entryBaseChance = getBaseChance(entry);
final var baseChance = entryBaseChance.orElse(poolBaseChance.orElseGet(() -> ConstantValue.exactly(1f)));
NumberProvider countRange = getCountRange(entry);
if (entry instanceof LootItemAccessor lootItem) {
ItemStack itemStack = new ItemStack(lootItem.getItem());
Expand All @@ -70,21 +71,22 @@ public static List<LootTableEntry> getLootTableEntries(@Nullable LootTable lootT
return result;
}

private static float getBaseChance(LootPool pool) {
private static Optional<NumberProvider> getBaseChance(LootPool pool) {
return getBaseChance(((LootPoolAccessor) pool).getConditions());
}

private static float getBaseChance(LootPoolEntryContainer entry) {
return getBaseChance(((LootPoolEntryContainerAccessor) entry).getConditions().clone());
private static Optional<NumberProvider> getBaseChance(LootPoolEntryContainer entry) {
return getBaseChance(((LootPoolEntryContainerAccessor) entry).getConditions());
}

private static float getBaseChance(LootItemCondition[] conditions) {
for (LootItemCondition condition : conditions) {
private static Optional<NumberProvider> getBaseChance(List<LootItemCondition> conditions) {
for (final var condition : conditions) {
if (condition instanceof LootItemRandomChanceConditionAccessor chanceCondition) {
return chanceCondition.getProbability();
return Optional.of(chanceCondition.getChance());
}
}
return 1f;

return Optional.empty();
}

private static NumberProvider getCountRange(LootPoolEntryContainer entry) {
Expand Down Expand Up @@ -144,7 +146,7 @@ public static List<MergedLootTableEntry> mergeLootTableEntries(List<LootTableEnt
for (ResourceLocation key : entryMap.keySet()) {
List<LootTableEntry> mergableEntries = entryMap.get(key);
LootTableEntry firstEntry = mergableEntries.getFirst();
mergableEntries.sort(Comparator.comparing(LootTableEntry::getBaseChance).reversed());
// TODO mergableEntries.sort(Comparator.comparing(LootTableEntry::getBaseChance).reversed());
result.add(new MergedLootTableEntry(firstEntry.getItemStack(), mergableEntries));
}
return result;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.blay09.mods.excompressum.mixin;

import net.minecraft.core.Holder;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -8,5 +9,5 @@
@Mixin(LootItem.class)
public interface LootItemAccessor {
@Accessor
Item getItem();
Holder<Item> getItem();
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package net.blay09.mods.excompressum.mixin;

import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition;
import net.minecraft.world.level.storage.loot.providers.number.NumberProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(LootItemRandomChanceCondition.class)
public interface LootItemRandomChanceConditionAccessor {
@Accessor
float getProbability();
NumberProvider getChance();
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
@Mixin(LootPool.class)
public interface LootPoolAccessor {
@Accessor
LootItemCondition[] getConditions();
List<LootItemCondition> getConditions();
@Accessor
LootPoolEntryContainer[] getEntries();
List<LootPoolEntryContainer> getEntries();
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package net.blay09.mods.excompressum.mixin;

import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer;
import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer;
import net.minecraft.world.level.storage.loot.functions.LootItemFunction;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.util.List;

@Mixin(LootPoolEntryContainer.class)
public interface LootPoolEntryContainerAccessor {
@Accessor
LootItemCondition[] getConditions();
List<LootItemCondition> getConditions();
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.util.List;

@Mixin(LootPoolSingletonContainer.class)
public interface LootPoolSingletonContainerAccessor {
@Accessor
LootItemFunction[] getFunctions();
List<LootItemFunction> getFunctions();
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
package net.blay09.mods.excompressum.mixin;

import net.blay09.mods.excompressum.CommonLootTableAccessor;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

import java.util.List;

@Mixin(LootTable.class)
public abstract class LootTableAccessor implements CommonLootTableAccessor {
public interface LootTableAccessor {
@Accessor
protected abstract LootPool[] getPools();

@Override
public LootPool[] balm_getPools() {
return getPools();
}
List<LootPool> getPools();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,6 @@

public abstract class ExCompressumRecipe<T extends RecipeInput> implements Recipe<T> {

private final ResourceLocation id;
private final RecipeType<?> type;

public ExCompressumRecipe(ResourceLocation id, RecipeType<?> type) {
this.id = id;
this.type = type;
}

@Override
public boolean matches(T inv, Level level) {
return false;
Expand All @@ -41,16 +33,4 @@ public boolean canCraftInDimensions(int width, int height) {
return false;
}

public ResourceLocation getRecipeId() {
return id;
}

@Override
public abstract RecipeSerializer<?> getSerializer();

@Override
public RecipeType<?> getType() {
return type;
}

}
Loading

0 comments on commit a93bb19

Please sign in to comment.