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

@@ -102,8 +102,8 @@ processResources {
shadowJar {
dependencies {
include(dependency('me.hypherionmc.night-config:toml:3.6.5_custom'))
include(dependency('me.hypherionmc.night-config:core:3.6.5_custom'))
include(dependency("me.hypherionmc.moon-config:core:${moon_config}"))
include(dependency("me.hypherionmc.moon-config:toml:${moon_config}"))
//relocate 'me.hypherionmc.nightconfig', 'shadow.hypherionmc.nightconfig'
}

View File

@@ -8,6 +8,8 @@ import me.hypherionmc.craterlib.systems.reg.RegistryObject;
import me.hypherionmc.craterlib.util.ColorPropertyFunction;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.network.Connection;
import net.minecraft.network.FriendlyByteBuf;
@@ -16,6 +18,8 @@ import net.minecraft.world.entity.player.Player;
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 net.minecraftforge.fml.loading.FMLEnvironment;
import java.util.Collection;
@@ -71,4 +75,9 @@ public class ForgeClientHelper implements LibClientHelper {
public void registerClientReceiver(ResourceLocation channelName, Function<FriendlyByteBuf, CraterPacket<?>> factory) {
// UNUSED
}
@Override
public void registerBlockEntityRenderer(BlockEntityType<? extends BlockEntity> blockEntityType, BlockEntityRendererProvider blockEntityRendererFactory) {
BlockEntityRenderers.register(blockEntityType, blockEntityRendererFactory);
}
}

View File

@@ -7,7 +7,6 @@ package me.hypherionmc.craterlib.client.gui.widgets;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import me.hypherionmc.craterlib.util.LangUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.narration.NarrationElementOutput;
@@ -22,8 +21,8 @@ import net.minecraft.util.FastColor;
import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.templates.FluidTank;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.function.Supplier;
/** Copied from https://github.com/SleepyTrousers/EnderIO-Rewrite/blob/dev/1.18.x/enderio-machines/src/main/java/com/enderio/machines/client/FluidStackWidget.java*/
@@ -42,7 +41,7 @@ public class FluidStackWidget extends AbstractWidget {
}
@Override
public void renderButton(PoseStack pPoseStack, int pMouseX, int pMouseY, float pPartialTicks) {
public void renderWidget(@NotNull PoseStack pPoseStack, int pMouseX, int pMouseY, float pPartialTicks) {
Minecraft minecraft = Minecraft.getInstance();
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.defaultBlendFunc();
@@ -79,7 +78,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(pPoseStack, getX(), getY() + notDrawingHeight, displayOn.getBlitOffset(), sprite.getU0()*atlasWidth, sprite.getV0()*atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight);
// TODO Double Check this
blit(pPoseStack, getX(), getY() + notDrawingHeight, 0, sprite.getU0()*atlasWidth, sprite.getV0()*atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight);
pPoseStack.translate(0,-16, 0);
}

View File

@@ -2,6 +2,7 @@ package me.hypherionmc.craterlib.common;
import me.hypherionmc.craterlib.CraterConstants;
import me.hypherionmc.craterlib.systems.internal.CreativeTabRegistry;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraftforge.event.CreativeModeTabEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
@@ -11,11 +12,18 @@ import net.minecraftforge.fml.common.Mod;
public class ForgeCommonEvents {
@SubscribeEvent
public static void buildContents(CreativeModeTabEvent.Register event) {
public static void registerTabs(CreativeModeTabEvent.Register event) {
CraterConstants.LOG.info("Registering Creative Tabs");
CreativeTabRegistry.getTABS().forEach(tab -> {
CreativeModeTab creativeModeTab = event.registerCreativeModeTab(tab.getResourceLocation(), builder -> {
builder.icon(tab::getIcon);
builder.title(
Component.translatable("itemGroup." +
tab.getResourceLocation().toString().replace(":", ".")
)
);
builder.icon(tab.getIcon());
if (!tab.getBackgroundSuffix().isEmpty()) {
builder.backgroundSuffix(tab.getBackgroundSuffix());
@@ -25,4 +33,13 @@ public class ForgeCommonEvents {
});
}
@SubscribeEvent
public static void registerTabs(CreativeModeTabEvent.BuildContents event) {
CreativeModeTab tab = event.getTab();
CreativeTabRegistry.getTabItems().stream()
.filter(p -> p.getLeft().get() == tab)
.forEach(itemPair -> event.accept(itemPair.getRight()));
}
}

View File

@@ -1,9 +1,15 @@
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.ForgeNetworkHandler;
import me.hypherionmc.craterlib.platform.services.LibCommonHelper;
import me.hypherionmc.craterlib.systems.energy.ForgeEnergyReader;
import me.hypherionmc.craterlib.systems.fluid.ForgeFluidReader;
import me.hypherionmc.craterlib.systems.fluid.ICraterFluidHandler;
import net.minecraft.core.Direction;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
@@ -13,7 +19,8 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.common.extensions.IForgeMenuType;
import net.minecraftforge.network.NetworkHooks;
import net.minecraftforge.server.ServerLifecycleHooks;
@@ -22,9 +29,10 @@ import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* @author HypherionSA
@@ -64,4 +72,27 @@ public class ForgeCommonHelper implements LibCommonHelper {
public <T extends AbstractContainerMenu> MenuType<T> createMenuType(TriFunction<Integer, Inventory, FriendlyByteBuf, T> constructor) {
return IForgeMenuType.create(constructor::apply);
}
@Override
public <T> Optional<T> getCapabilityHandler(BlockEntity entity, Direction side, CapabilityHandler capability) {
if (capability == CapabilityHandler.ENERGY) {
AtomicReference<ForgeEnergyReader> energyReference = new AtomicReference<>();
entity.getCapability(ForgeCapabilities.ENERGY, side).ifPresent(storage -> energyReference.set(new ForgeEnergyReader(storage)));
return energyReference.get() != null ? (Optional<T>) Optional.of(energyReference.get()) : Optional.empty();
}
if (capability == CapabilityHandler.FLUID) {
AtomicReference<ICraterFluidHandler> craterFluidHandler = new AtomicReference<>();
entity.getCapability(ForgeCapabilities.FLUID_HANDLER, side).ifPresent(iFluidHandler -> craterFluidHandler.set(new ForgeFluidReader(iFluidHandler)));
return craterFluidHandler.get() != null ? (Optional<T>) Optional.of(craterFluidHandler.get()) : Optional.empty();
}
if (entity instanceof ICraterCapProvider capProvider) {
return capProvider.getCapability(capability, side);
}
return Optional.empty();
}
}

View File

@@ -0,0 +1,53 @@
package me.hypherionmc.craterlib.common;
import me.hypherionmc.craterlib.platform.services.LibFluidHelper;
import me.hypherionmc.craterlib.systems.fluid.*;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.material.Fluid;
import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
public class ForgeFluidHelper implements LibFluidHelper {
@Override
public CraterFluidTank createFluidTank(int capacity) {
return new ForgeWrappedFluidTank(capacity);
}
@Override
public CraterFluidTank createFluidTank(int capacity, Fluid... validFluids) {
return new ForgeWrappedFluidTank(capacity, (variant) -> Arrays.stream(validFluids).allMatch(f -> f.isSame(variant.getFluid())));
}
@Override
public boolean interactWithFluidHandler(Player player, InteractionHand hand, ICraterFluidHandler fluidHandler) {
ForgeFluidTankInteractor interactor = new ForgeFluidTankInteractor(fluidHandler);
return FluidUtil.interactWithFluidHandler(player, hand, interactor);
}
@Override
public boolean interactWithFluidHandler(@NotNull Player player, @NotNull InteractionHand hand, @NotNull Level level, @NotNull BlockPos pos, @Nullable Direction side) {
return FluidUtil.interactWithFluidHandler(player, hand, level, pos, side);
}
@Override
public TextureAtlasSprite getFluidTexture(FluidHolder fluidHolder) {
return ForgeFluidUtils.getFluidTexture(new FluidStack(fluidHolder.getFluid(), 0), true);
}
@Override
public int getFluidColor(Fluid fluid) {
IClientFluidTypeExtensions props = IClientFluidTypeExtensions.of(fluid);
return props.getTintColor();
}
}

View File

@@ -1,12 +1,15 @@
package me.hypherionmc.craterlib.mixin;
import me.hypherionmc.craterlib.api.blockentities.caps.ForgeCapability;
import me.hypherionmc.craterlib.api.blockentities.caps.IForgeCapProvider;
import me.hypherionmc.craterlib.api.blockentities.caps.CapabilityHandler;
import me.hypherionmc.craterlib.api.blockentities.caps.ICraterCapProvider;
import me.hypherionmc.craterlib.common.blockentity.CraterBlockEntity;
import me.hypherionmc.craterlib.systems.SimpleInventory;
import me.hypherionmc.craterlib.systems.energy.CustomEnergyStorage;
import me.hypherionmc.craterlib.systems.energy.ForgeEnergyWrapper;
import me.hypherionmc.craterlib.systems.fluid.CraterFluidTank;
import me.hypherionmc.craterlib.systems.fluid.ForgeWrappedFluidTank;
import me.hypherionmc.craterlib.systems.fluid.ICraterFluidHandler;
import me.hypherionmc.craterlib.systems.inventory.ForgeInventoryWrapper;
import me.hypherionmc.craterlib.systems.inventory.SimpleInventory;
import net.minecraft.core.Direction;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
@@ -28,22 +31,29 @@ public class BlockEntityMixin implements ICapabilityProvider {
@Override
public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
IForgeCapProvider capProvider = (IForgeCapProvider) this;
ICraterCapProvider capProvider = (ICraterCapProvider) this;
if (cap == ForgeCapabilities.ENERGY) {
Optional<CustomEnergyStorage> forgeCap = capProvider.getForgeCapability(ForgeCapability.ENERGY, side);
Optional<CustomEnergyStorage> forgeCap = capProvider.getCapability(CapabilityHandler.ENERGY, side);
if (forgeCap.isPresent()) {
return LazyOptional.of(() -> new ForgeEnergyWrapper(forgeCap.get())).cast();
}
}
if (cap == ForgeCapabilities.ITEM_HANDLER) {
Optional<SimpleInventory> inventory = capProvider.getForgeCapability(ForgeCapability.ITEM, side);
Optional<SimpleInventory> inventory = capProvider.getCapability(CapabilityHandler.ITEM, side);
if (inventory.isPresent()) {
return LazyOptional.of(() -> new SidedInvWrapper(new ForgeInventoryWrapper(inventory.get()), side)).cast();
}
}
if (cap == ForgeCapabilities.FLUID_HANDLER) {
Optional<ICraterFluidHandler> fluidTank = capProvider.getCapability(CapabilityHandler.FLUID, side);
if (fluidTank.isPresent()) {
return LazyOptional.of(() -> (ForgeWrappedFluidTank)fluidTank.get()).cast();
}
}
return LazyOptional.empty();
}
}

View File

@@ -0,0 +1,36 @@
package me.hypherionmc.craterlib.systems.energy;
import net.minecraftforge.energy.IEnergyStorage;
public record ForgeEnergyReader(IEnergyStorage forgeStorage) implements ICraterEnergyStorage {
@Override
public int receiveEnergy(int toReceive, boolean test) {
return forgeStorage.receiveEnergy(toReceive, test);
}
@Override
public int extractEnergy(int toExtract, boolean test) {
return forgeStorage.extractEnergy(toExtract, test);
}
@Override
public int getPowerLevel() {
return forgeStorage.getEnergyStored();
}
@Override
public int getMaxInput() {
return 0;
}
@Override
public int getMaxOutput() {
return 0;
}
@Override
public int getPowerCapacity() {
return forgeStorage().getMaxEnergyStored();
}
}

View File

@@ -0,0 +1,44 @@
package me.hypherionmc.craterlib.systems.fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
public record ForgeFluidReader(IFluidHandler fluidHandler) implements ICraterFluidHandler {
@Override
public int insert(FluidHolder fluidHolder, FluidAction action) {
return fluidHandler.fill(new FluidStack(fluidHolder.getFluid(), fluidHolder.getAmount()), action.simulate() ? IFluidHandler.FluidAction.SIMULATE : IFluidHandler.FluidAction.EXECUTE);
}
@Override
public FluidHolder extract(FluidHolder fluidHolder, FluidAction action) {
FluidStack extracted = fluidHandler.drain(new FluidStack(fluidHolder.getFluid(), fluidHolder.getAmount()), action.simulate() ? IFluidHandler.FluidAction.SIMULATE : IFluidHandler.FluidAction.EXECUTE);
return new FluidHolder(extracted.getFluid(), extracted.getAmount());
}
@Override
public FluidHolder extract(int amount, FluidAction action) {
FluidStack extracted = fluidHandler.drain(amount, action.simulate() ? IFluidHandler.FluidAction.SIMULATE : IFluidHandler.FluidAction.EXECUTE);
return new FluidHolder(extracted.getFluid(), extracted.getAmount());
}
@Override
public boolean isTankEmpty() {
return false;
}
@Override
public FluidHolder getFluidInTank() {
return FluidHolder.EMPTY;
}
@Override
public int getTankLevel() {
return 0;
}
@Override
public int getTankCapacity() {
return 0;
}
}

View File

@@ -0,0 +1,45 @@
package me.hypherionmc.craterlib.systems.fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import org.jetbrains.annotations.NotNull;
public record ForgeFluidTankInteractor(ICraterFluidHandler fluidHandler) implements IFluidHandler {
@Override
public int getTanks() {
return 1;
}
@Override
public @NotNull FluidStack getFluidInTank(int tank) {
return new FluidStack(fluidHandler.getFluidInTank().getFluid(), fluidHandler.getFluidInTank().getAmount());
}
@Override
public int getTankCapacity(int tank) {
return fluidHandler.getTankCapacity();
}
@Override
public boolean isFluidValid(int tank, @NotNull FluidStack stack) {
return true;
}
@Override
public int fill(FluidStack resource, FluidAction action) {
return fluidHandler.insert(new FluidHolder(resource.getFluid(), resource.getAmount()), action.simulate() ? ICraterFluidHandler.FluidAction.SIMULATE : ICraterFluidHandler.FluidAction.EXECUTE);
}
@Override
public @NotNull FluidStack drain(FluidStack resource, FluidAction action) {
FluidHolder drained = fluidHandler.extract(new FluidHolder(resource.getFluid(), resource.getAmount()), action.simulate() ? ICraterFluidHandler.FluidAction.SIMULATE : ICraterFluidHandler.FluidAction.EXECUTE);
return new FluidStack(drained.getFluid(), drained.getAmount());
}
@Override
public @NotNull FluidStack drain(int maxDrain, FluidAction action) {
FluidHolder drained = fluidHandler.extract(maxDrain, action.simulate() ? ICraterFluidHandler.FluidAction.SIMULATE : ICraterFluidHandler.FluidAction.EXECUTE);
return new FluidStack(drained.getFluid(), drained.getAmount());
}
}

View File

@@ -0,0 +1,25 @@
package me.hypherionmc.craterlib.systems.fluid;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.AbstractTexture;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions;
import net.minecraftforge.fluids.FluidStack;
public class ForgeFluidUtils {
public static TextureAtlasSprite getFluidTexture(FluidStack fluidStack, boolean still) {
IClientFluidTypeExtensions props = IClientFluidTypeExtensions.of(fluidStack.getFluid());
ResourceLocation fluidStill = still ? props.getStillTexture(fluidStack) : props.getFlowingTexture(fluidStack);
AbstractTexture texture = Minecraft.getInstance().getTextureManager().getTexture(TextureAtlas.LOCATION_BLOCKS);
if (texture instanceof TextureAtlas atlas) {
return atlas.getSprite(fluidStill);
}
return null;
}
}

View File

@@ -0,0 +1,76 @@
package me.hypherionmc.craterlib.systems.fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fluids.capability.IFluidHandler;
import org.jetbrains.annotations.NotNull;
import java.util.function.Predicate;
public class ForgeWrappedFluidTank extends CraterFluidTank implements IFluidTank, IFluidHandler {
public ForgeWrappedFluidTank(int capacity) {
super(capacity);
}
public ForgeWrappedFluidTank(int capacity, Predicate<FluidStack> predicate) {
super(capacity, p -> predicate.test(new FluidStack(p.getFluid(), p.getAmount())));
}
@Override
public @NotNull FluidStack getFluid() {
return new FluidStack(this.getFluidInTank().getFluid(), this.getTankLevel());
}
@Override
public int getFluidAmount() {
return this.getTankLevel();
}
@Override
public int getCapacity() {
return this.getTankCapacity();
}
@Override
public boolean isFluidValid(FluidStack stack) {
return this.isValidFluid(new FluidHolder(stack.getFluid(), stack.getAmount()));
}
@Override
public int getTanks() {
return 1;
}
@Override
public @NotNull FluidStack getFluidInTank(int tankInt) {
return new FluidStack(this.getFluidInTank().getFluid(), this.getTankLevel());
}
@Override
public int getTankCapacity(int tankInt) {
return this.getTankCapacity();
}
@Override
public boolean isFluidValid(int tankInt, @NotNull FluidStack stack) {
return this.isValidFluid(new FluidHolder(stack.getFluid(), stack.getAmount()));
}
@Override
public int fill(FluidStack resource, IFluidHandler.FluidAction action) {
return this.insert(new FluidHolder(resource.getFluid(), resource.getAmount()), action.simulate() ? CraterFluidTank.FluidAction.SIMULATE : CraterFluidTank.FluidAction.EXECUTE);
}
@Override
public @NotNull FluidStack drain(int maxDrain, IFluidHandler.FluidAction action) {
FluidHolder extracted = this.extract(maxDrain, action.simulate() ? CraterFluidTank.FluidAction.SIMULATE : CraterFluidTank.FluidAction.EXECUTE);
return new FluidStack(extracted.getFluid(), extracted.getAmount());
}
@Override
public @NotNull FluidStack drain(FluidStack resource, IFluidHandler.FluidAction action) {
FluidHolder holder = this.extract(new FluidHolder(resource.getFluid(), resource.getAmount()), action.simulate() ? CraterFluidTank.FluidAction.SIMULATE : CraterFluidTank.FluidAction.EXECUTE);
return new FluidStack(holder.getFluid(), holder.getAmount());
}
}

View File

@@ -1,7 +1,6 @@
package me.hypherionmc.craterlib.systems.inventory;
import com.google.common.base.Suppliers;
import me.hypherionmc.craterlib.systems.SimpleInventory;
import net.minecraft.core.Direction;
import net.minecraft.world.WorldlyContainer;
import net.minecraft.world.entity.player.Player;

View File

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