Some code changes I don't remember and port to 1.19.4

This commit is contained in:
2023-03-19 13:01:16 +02:00
parent 5311799988
commit 75d1c7692e
57 changed files with 1020 additions and 204 deletions

View File

@@ -11,10 +11,11 @@ dependencies {
mappings loom.officialMojangMappings()
modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
include 'me.hypherionmc.night-config:toml:3.6.5_custom'
include 'me.hypherionmc.night-config:core:3.6.5_custom'
implementation project(":Common")
include "me.hypherionmc.moon-config:core:${moon_config}"
include "me.hypherionmc.moon-config:toml:${moon_config}"
modApi("com.terraformersmc:modmenu:${mod_menu_version}") {
exclude(group: "net.fabricmc.fabric-api")
}

View File

@@ -1,13 +1,37 @@
package me.hypherionmc.craterlib;
import me.hypherionmc.craterlib.common.FabricCommonHelper;
import me.hypherionmc.craterlib.systems.internal.CreativeTabRegistry;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import org.apache.commons.lang3.tuple.Pair;
import java.util.stream.Collectors;
public class CraterLibInitializer implements ModInitializer {
@Override
public void onInitialize() {
ServerLifecycleEvents.SERVER_STARTING.register(server -> FabricCommonHelper.server = server);
CreativeTabRegistry.getTABS().forEach(tab -> {
CreativeModeTab finalTab = FabricItemGroup.builder(tab.getResourceLocation())
.title(Component.translatable("itemGroup." +
tab.getResourceLocation().toString().replace(":", ".")
))
.displayItems((featureFlagSet, output) -> {
CreativeTabRegistry
.getTabItems()
.stream().filter(t -> t.getLeft() == tab)
.map(Pair::getRight).forEach(itm -> output.accept(itm.get()));
})
.icon(tab.getIcon())
.build();
tab.setTab(finalTab);
});
}
}

View File

@@ -9,12 +9,14 @@ import me.hypherionmc.craterlib.util.ColorPropertyFunction;
import net.fabricmc.api.EnvType;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
@@ -23,6 +25,8 @@ import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import java.util.Collection;
import java.util.function.Function;
@@ -90,4 +94,9 @@ public class FabricClientHelper implements LibClientHelper {
public static void registerCreativeItems(CreativeModeTab tab, FabricItemGroupEntries entries) {
}
@Override
public void registerBlockEntityRenderer(BlockEntityType<? extends BlockEntity> blockEntityType, BlockEntityRendererProvider blockEntityRendererFactory) {
BlockEntityRendererRegistry.register(blockEntityType, blockEntityRendererFactory);
}
}

View File

@@ -3,7 +3,6 @@ package me.hypherionmc.craterlib.client.gui.widgets;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import me.hypherionmc.craterlib.systems.fluid.FluidTank;
import me.hypherionmc.craterlib.util.LangUtils;
import me.hypherionmc.craterlib.util.RenderUtils;
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
@@ -15,9 +14,8 @@ import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.network.chat.Component;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Supplier;
/**
@@ -38,8 +36,7 @@ public class FluidStackWidget extends AbstractWidget {
}
@Override
public void renderButton(PoseStack matrices, int mouseX, int mouseY, float delta) {
Minecraft minecraft = Minecraft.getInstance();
public void renderWidget(@NotNull PoseStack matrices, int mouseX, int mouseY, float delta) {
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.defaultBlendFunc();
RenderSystem.enableDepthTest();
@@ -71,7 +68,8 @@ public class FluidStackWidget extends AbstractWidget {
for (int i = 0; i < Math.ceil(renderableHeight / 16f); i++) {
int drawingHeight = Math.min(16, renderableHeight - 16 * i);
int notDrawingHeight = 16 - drawingHeight;
blit(matrices, getX(), getY() + notDrawingHeight, displayOn.getBlitOffset(), still.getU0() * atlasWidth, still.getV0() * atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight);
// TODO Double Check this
blit(matrices, getX(), getY() + notDrawingHeight, 0, still.getU0() * atlasWidth, still.getV0() * atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight);
matrices.translate(0, -16, 0);
}

View File

@@ -1,5 +1,7 @@
package me.hypherionmc.craterlib.common;
import me.hypherionmc.craterlib.api.blockentities.caps.CapabilityHandler;
import me.hypherionmc.craterlib.api.blockentities.caps.ICraterCapProvider;
import me.hypherionmc.craterlib.network.CraterNetworkHandler;
import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.network.FabricNetworkHandler;
@@ -8,6 +10,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory;
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType;
import net.minecraft.core.Direction;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
@@ -19,9 +22,11 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.level.block.entity.BlockEntity;
import org.apache.commons.lang3.function.TriFunction;
import org.jetbrains.annotations.Nullable;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
@@ -79,4 +84,11 @@ public class FabricCommonHelper implements LibCommonHelper {
return new ExtendedScreenHandlerType<>(constructor::apply);
}
@Override
public <T> Optional<T> getCapabilityHandler(BlockEntity entity, Direction side, CapabilityHandler capability) {
if (entity instanceof ICraterCapProvider capProvider) {
return capProvider.getCapability(capability, side);
}
return Optional.empty();
}
}

View File

@@ -0,0 +1,67 @@
package me.hypherionmc.craterlib.common;
import me.hypherionmc.craterlib.platform.services.LibFluidHelper;
import me.hypherionmc.craterlib.systems.fluid.*;
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.impl.transfer.fluid.FluidVariantImpl;
import net.fabricmc.fabric.mixin.transfer.BucketItemAccessor;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
public class FabricFluidHelper implements LibFluidHelper {
@Override
public CraterFluidTank createFluidTank(int capacity) {
return new FluidTank(capacity);
}
@Override
public CraterFluidTank createFluidTank(int capacity, Fluid... validFluids) {
return new FluidTank(capacity, (variant) -> Arrays.stream(validFluids).allMatch(f -> f.isSame(variant.getFluid())));
}
@Override
public boolean interactWithFluidHandler(Player player, InteractionHand hand, ICraterFluidHandler fluidHandler) {
ItemStack stack = player.getItemInHand(hand);
if (stack.getItem() instanceof BucketItem bucketItem) {
FluidVariant fluidVariant = new FluidVariantImpl(((BucketItemAccessor) bucketItem).fabric_getFluid(), stack.getTag());
if (fluidVariant.isBlank())
return false;
if (fluidHandler.insert(new FluidHolder(fluidVariant.getFluid(), 1000), ICraterFluidHandler.FluidAction.EXECUTE) > 0) {
player.level.playSound(null, player.getOnPos(), SoundEvents.BUCKET_EMPTY, SoundSource.BLOCKS, 1.0f, 1.0f);
return true;
}
}
return false;
}
@Override
public boolean interactWithFluidHandler(@NotNull Player player, @NotNull InteractionHand hand, @NotNull Level level, @NotNull BlockPos pos, @Nullable Direction side) {
return false;
}
@Override
public TextureAtlasSprite getFluidTexture(FluidHolder fluidHolder) {
return FabricFluidUtils.getFluidTexture(FluidVariant.of(fluidHolder.getFluid()));
}
@Override
public int getFluidColor(Fluid fluid) {
return FluidVariantRendering.getColor(FluidVariant.of(fluid));
}
}

View File

@@ -0,0 +1,13 @@
package me.hypherionmc.craterlib.systems.fluid;
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
public class FabricFluidUtils {
public static TextureAtlasSprite getFluidTexture(FluidVariant fluidStack) {
return FluidVariantRendering.getSprite(fluidStack);
}
}

View File

@@ -5,59 +5,35 @@ import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.fabricmc.fabric.api.transfer.v1.storage.StoragePreconditions;
import net.fabricmc.fabric.api.transfer.v1.storage.StorageView;
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
import net.minecraft.nbt.CompoundTag;
import java.util.Iterator;
import java.util.function.Predicate;
public class FluidTank implements Storage<FluidVariant>, StorageView<FluidVariant> {
private final long capacity;
private final Predicate<FluidVariant> validFluid;
private long level = 0;
private FluidVariant fluid = FluidVariant.blank();
public class FluidTank extends CraterFluidTank implements Storage<FluidVariant>, StorageView<FluidVariant> {
public FluidTank(long capacity) {
this(capacity, e -> true);
}
public FluidTank(long capacity, Predicate<FluidVariant> validFluid) {
this.capacity = capacity;
this.validFluid = validFluid;
super((int) capacity, (p) -> validFluid.test(FluidVariant.of(p.getFluid())));
}
public boolean isFluidValid(FluidVariant variant) {
return validFluid.test(variant);
return isValidFluid(new FluidHolder(variant.getFluid(), 0));
}
@Override
public long insert(FluidVariant resource, long maxAmount, TransactionContext transaction) {
StoragePreconditions.notBlankNotNegative(resource, maxAmount);
if (this.fluid.isBlank() || this.fluid.equals(resource)) {
long inserted = Math.min(maxAmount, capacity - level);
if (inserted > 0) {
level += inserted;
this.fluid = resource;
}
return inserted;
}
return 0;
return insert(new FluidHolder(resource.getFluid(), (int) maxAmount), FluidAction.EXECUTE);
}
@Override
public long extract(FluidVariant resource, long maxAmount, TransactionContext transaction) {
StoragePreconditions.notBlankNotNegative(resource, maxAmount);
if (resource.equals(fluid)) {
long extracted = Math.min(maxAmount, level);
if (extracted > 0) {
level -= extracted;
if (level == 0) {
this.fluid = FluidVariant.blank();
}
}
return extracted;
}
return 0;
FluidHolder extracted = extract(new FluidHolder(resource.getFluid(), (int) maxAmount), FluidAction.EXECUTE);
return extracted.getAmount();
}
@Override
@@ -68,32 +44,21 @@ public class FluidTank implements Storage<FluidVariant>, StorageView<FluidVarian
@Override
public boolean isResourceBlank() {
return fluid.isBlank();
return isTankEmpty();
}
@Override
public FluidVariant getResource() {
return fluid;
return FluidVariant.of(getFluidInTank().getFluid());
}
@Override
public long getAmount() {
return level;
return getTankLevel();
}
@Override
public long getCapacity() {
return capacity;
}
public CompoundTag writeNbt(CompoundTag compound) {
FluidUtils.putFluid(compound, "fluid", getResource());
compound.putLong("amt", level);
return compound;
}
public void readNbt(CompoundTag nbtCompound) {
fluid = FluidUtils.getFluidCompatible(nbtCompound, "fluid");
level = nbtCompound.getLong("amt");
return getTankCapacity();
}
}

View File

@@ -1,55 +0,0 @@
package me.hypherionmc.craterlib.systems.fluid;
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.Fluids;
public class FluidUtils {
public static int fluidColorFromDye(DyeColor color) {
return color.getMaterialColor().col | 0xFF000000;
}
public static void putFluid(CompoundTag compound, String key, FluidVariant fluidVariant) {
CompoundTag savedTag = new CompoundTag();
savedTag.put("fk", fluidVariant.toNbt());
compound.put(key, savedTag);
}
public static FluidVariant getFluidCompatible(CompoundTag tag, String key) {
if (tag == null || !tag.contains(key))
return FluidVariant.blank();
if (tag.get(key) instanceof StringTag) {
return FluidVariant.of(BuiltInRegistries.FLUID.get(new ResourceLocation(tag.getString(key))));
} else {
CompoundTag compound = tag.getCompound(key);
if (compound.contains("fk")) {
return FluidVariant.fromNbt(compound.getCompound("fk"));
} else {
return FluidVariant.of(readLbaTag(tag.getCompound(key)));
}
}
}
private static Fluid readLbaTag(CompoundTag tag) {
if (tag.contains("ObjName") && tag.getString("Registry").equals("f")) {
return BuiltInRegistries.FLUID.get(new ResourceLocation(tag.getString("ObjName")));
} else {
return Fluids.EMPTY;
}
}
public static TextureAtlasSprite getFluidTexture(FluidVariant fluidStack) {
return FluidVariantRendering.getSprite(fluidStack);
}
}

View File

@@ -0,0 +1 @@
me.hypherionmc.craterlib.common.FabricFluidHelper

View File

@@ -16,9 +16,6 @@
"icon": "assets/modid/icon.png",
"environment": "*",
"entrypoints": {
"preLaunch": [
"me.hypherionmc.craterlib.CraterLibInitializer"
],
"main": [
"me.hypherionmc.craterlib.CraterLibInitializer"
],