Skip to content

Commit

Permalink
chunk vacuum
Browse files Browse the repository at this point in the history
  • Loading branch information
Thepigcat76 committed Oct 12, 2024
1 parent f337faa commit 98c3ea8
Show file tree
Hide file tree
Showing 36 changed files with 518 additions and 51 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// 1.21.1 2024-10-12T17:59:11.664838435 Block States: carbort
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// 1.21.1 2024-10-12T17:59:11.664164362 Tags for minecraft:block mod id carbort
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
// 1.21 2024-07-14T17:55:00.8812286 Languages: en_us for mod: carbort
741587d7b233f620ae8aef7fbf8c9f9a849dc8b8 assets/carbort/lang/en_us.json
// 1.21.1 2024-10-12T17:59:11.665318154 Languages: en_us for mod: carbort
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// 1.21.1 2024-10-12T17:59:11.660763593 Tags for minecraft:item mod id vanilla
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// 1.21.1 2024-10-12T17:59:11.66569786 Item Models: carbort
a45ed4013794544639dd8410330e73fcedbf41bb assets/carbort/models/item/bean.json
f66b17585aa3815322f2dcc8278e5203ed0ab18e assets/carbort/models/item/bean_wand.json
44943658365709a2625f083514959d2dcb0b08b0 assets/carbort/models/item/chunk_analyzer.json
acdf847e559af9dac575d3705359fcae8fbb6525 assets/carbort/models/item/fire_in_a_bottle.json
3a5f2fcb47efbbc91cc4d4f65eb102a734282b73 assets/carbort/models/item/golden_bean.json
358c0948d66ed43c14f61e749407b6c243557241 assets/carbort/models/item/healing_axe.json
25f01b54f85eb6202045452fde31d0309952a9a8 assets/carbort/models/item/party_pickaxe.json
74bd839641d7d336279c4cc7ce962bfe45bb07ee assets/carbort/models/item/shrinkinator.json
71f9869185fe189e0c5846be05a987b5aaf9b788 assets/carbort/models/item/tormented_soul.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
// 1.21.1 2024-10-12T17:59:11.663395815 Recipes
6 changes: 0 additions & 6 deletions src/generated/resources/assets/carbort/lang/en_us.json

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "carbort:item/bean_wand"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "carbort:item/shrinkinator"
}
}
17 changes: 15 additions & 2 deletions src/main/java/com/leclowndu93150/carbort/CarbortConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,32 @@ public class CarbortConfig {

private static final ModConfigSpec.IntValue CHUNK_ANALYZER_ENERGY_USAGE = BUILDER
.comment("Configure how much energy the chunk analyzer uses for each scanning operation.")
.defineInRange("chunk_analyzer_energy_usage", 0, 0, Integer.MAX_VALUE);
.defineInRange("chunk_analyzer_energy_usage", 100, 0, Integer.MAX_VALUE);
private static final ModConfigSpec.IntValue CHUNK_ANALYZER_MAX_ENERGY = BUILDER
.comment("Configure the maximum amount of energy the chunk analyzer can hold. Setting this to 0 will disable energy on the chunk analyzer.")
.defineInRange("chunk_analyzer_max_energy", 0, 0, Integer.MAX_VALUE);
.defineInRange("chunk_analyzer_max_energy", 10_000, 0, Integer.MAX_VALUE);

private static final ModConfigSpec.IntValue CHUNK_VACUUM_ENERGY_USAGE = BUILDER
.comment("Configure how much energy the chunk vacuum uses for each block removal.")
.defineInRange("chunk_vacuum_energy_usage", 100_000, 0, Integer.MAX_VALUE);
private static final ModConfigSpec.IntValue CHUNK_VACUUM_MAX_ENERGY = BUILDER
.comment("Configure the maximum amount of energy the chunk vacuum can hold. Setting this to 0 will disable energy on the chunk vacuum.")
.defineInRange("chunk_vacuum_max_energy", 1_000_000, 0, Integer.MAX_VALUE);

public static final ModConfigSpec SPEC = BUILDER.build();

public static int chunkAnalyzerEnergyUsage;
public static int chunkAnalyzerMaxEnergy;

public static int chunkVacuumEnergyUsage;
public static int chunkVacuumMaxEnergy;

@SubscribeEvent
public static void onLoad(final ModConfigEvent event) {
chunkAnalyzerEnergyUsage = CHUNK_ANALYZER_ENERGY_USAGE.getAsInt();
chunkAnalyzerMaxEnergy = CHUNK_ANALYZER_MAX_ENERGY.getAsInt();

chunkVacuumEnergyUsage = CHUNK_VACUUM_ENERGY_USAGE.getAsInt();
chunkVacuumMaxEnergy = CHUNK_VACUUM_MAX_ENERGY.getAsInt();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.leclowndu93150.carbort.api;
package com.leclowndu93150.carbort.api.foods;

import com.leclowndu93150.carbort.content.blocks.CakeBlock;
import com.leclowndu93150.carbort.registries.CBBlocks;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.leclowndu93150.carbort.content.energy;
package com.leclowndu93150.carbort.api.items;

public interface IEnergyItem {
int getCapacity();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.leclowndu93150.carbort.api.items;

import com.leclowndu93150.carbort.utils.CapabilityUtils;
import net.minecraft.util.FastColor;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.energy.IEnergyStorage;

public abstract class SimpleEnergyItem extends Item implements IEnergyItem {
public SimpleEnergyItem(Properties properties) {
super(properties);
}

public abstract int getEnergyUsage();

@Override
public boolean isBarVisible(ItemStack stack) {
return getCapacity() > 0;
}

@Override
public int getBarWidth(ItemStack stack) {
IEnergyStorage energyStorage = CapabilityUtils.itemEnergyStorage(stack);
return Math.round(13.0F - ((1 - ((float) energyStorage.getEnergyStored() / energyStorage.getMaxEnergyStored())) * 13.0F));
}

@Override
public int getBarColor(ItemStack stack) {
return FastColor.ARGB32.color(235, 7, 7);
}

// TODO: Fancy tooltip
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.leclowndu93150.carbort.content.energy;
package com.leclowndu93150.carbort.capabilties;

import com.leclowndu93150.carbort.registries.CBDataComponents;
import net.minecraft.core.HolderLookup;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.leclowndu93150.carbort.content.items;

import com.leclowndu93150.carbort.CarbortConfig;
import com.leclowndu93150.carbort.content.energy.IEnergyItem;
import com.leclowndu93150.carbort.api.items.IEnergyItem;
import com.leclowndu93150.carbort.api.items.SimpleEnergyItem;
import com.leclowndu93150.carbort.content.screen.ChunkAnalyzerMenu;
import com.leclowndu93150.carbort.utils.CapabilityUtils;
import net.minecraft.network.chat.Component;
Expand All @@ -18,11 +19,16 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

public class ChunkAnalyzerItem extends Item implements IEnergyItem, MenuProvider {
public class ChunkAnalyzerItem extends SimpleEnergyItem implements MenuProvider {
public ChunkAnalyzerItem(Properties properties) {
super(properties);
}

@Override
public int getEnergyUsage() {
return CarbortConfig.chunkAnalyzerEnergyUsage;
}

@Override
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
player.openMenu(this);
Expand All @@ -34,22 +40,6 @@ public int getCapacity() {
return CarbortConfig.chunkAnalyzerMaxEnergy;
}

@Override
public boolean isBarVisible(ItemStack stack) {
return CarbortConfig.chunkAnalyzerMaxEnergy > 0;
}

@Override
public int getBarWidth(ItemStack stack) {
IEnergyStorage energyStorage = CapabilityUtils.itemEnergyStorage(stack);
return Math.round(13.0F - ((1 - ((float) energyStorage.getEnergyStored() / energyStorage.getMaxEnergyStored())) * 13.0F));
}

@Override
public int getBarColor(ItemStack stack) {
return 0x8CBFE4;
}

@Override
public @NotNull Component getDisplayName() {
return Component.literal("Chunk Analyzer");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package com.leclowndu93150.carbort.content.items;

import com.leclowndu93150.carbort.Carbort;
import com.leclowndu93150.carbort.CarbortConfig;
import com.leclowndu93150.carbort.api.items.SimpleEnergyItem;
import com.leclowndu93150.carbort.utils.ChunkVacuumHelper;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.data.worldgen.DimensionTypes;
import net.minecraft.network.chat.Component;
import net.minecraft.server.TickTask;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.UseAnim;
import net.minecraft.world.level.ClipContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
import net.minecraft.world.level.dimension.DimensionDefaults;
import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.level.material.Fluids;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.energy.IEnergyStorage;
import net.neoforged.neoforge.fluids.FluidStack;
import net.neoforged.neoforge.fluids.capability.IFluidHandler;

public class ChunkVacuumItem extends SimpleEnergyItem {
public ChunkVacuumItem(Properties properties) {
super(properties);
}

@Override
public int getEnergyUsage() {
return CarbortConfig.chunkVacuumEnergyUsage;
}

@Override
public int getCapacity() {
return CarbortConfig.chunkVacuumMaxEnergy;
}

@Override
public UseAnim getUseAnimation(ItemStack stack) {
return UseAnim.BOW;
}

@Override
public int getUseDuration(ItemStack stack, LivingEntity entity) {
return 40;
}

@Override
public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livingEntity) {
if (level instanceof ServerLevel serverLevel && livingEntity instanceof ServerPlayer serverPlayer) {
IEnergyStorage energyStorage = serverPlayer.getMainHandItem().getCapability(Capabilities.EnergyStorage.ITEM);

BlockPos pos = getPlayerPOVHitResult(level, serverPlayer, ClipContext.Fluid.NONE).getBlockPos();
if (pos.getY() < level.getMinBuildHeight()
&& level.getBlockState(pos).is(Blocks.VOID_AIR)
&& level.dimensionTypeRegistration().is(BuiltinDimensionTypes.OVERWORLD)) {
ItemStack offhandItem = serverPlayer.getOffhandItem();
IFluidHandler fluidHandler = offhandItem.getCapability(Capabilities.FluidHandler.ITEM);
level.playSound(null, pos, SoundEvents.WITHER_HURT, SoundSource.BLOCKS);
if (fluidHandler != null) {
fluidHandler.fill(new FluidStack(Fluids.LAVA, 50), IFluidHandler.FluidAction.EXECUTE);
serverPlayer.startUsingItem(InteractionHand.MAIN_HAND);
}
if (!serverPlayer.hasInfiniteMaterials()) {
energyStorage.extractEnergy(getEnergyUsage() / 10, false);
}
} else {
ChunkVacuumHelper helper = new ChunkVacuumHelper(serverLevel, serverPlayer, pos);
serverLevel.getServer().doRunTask(new TickTask(0, helper::removeArea));
if (!serverPlayer.hasInfiniteMaterials()) {
energyStorage.extractEnergy(getEnergyUsage(), false);
}
}
}
return super.finishUsingItem(stack, level, livingEntity);
}

@Override
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
IEnergyStorage energyStorage = player.getMainHandItem().getCapability(Capabilities.EnergyStorage.ITEM);

BlockPos pos = getPlayerPOVHitResult(level, player, ClipContext.Fluid.NONE).getBlockPos();
if (pos.getY() < level.getMinBuildHeight()
&& level.getBlockState(pos).is(Blocks.VOID_AIR)
&& level.dimensionTypeRegistration().is(BuiltinDimensionTypes.OVERWORLD)) {
if (energyStorage.getEnergyStored() < getEnergyUsage() / 10) {
player.displayClientMessage(Component.literal("Not enough energy").withStyle(ChatFormatting.RED), true);
return super.use(level, player, usedHand);
}
} else {
if (energyStorage.getEnergyStored() < getEnergyUsage()) {
player.displayClientMessage(Component.literal("Not enough energy").withStyle(ChatFormatting.RED), true);
return super.use(level, player, usedHand);
}
}

ItemStack mainHandItem = player.getMainHandItem();
if (mainHandItem.is(this)) {
player.startUsingItem(usedHand);
return InteractionResultHolder.fail(mainHandItem);
}
return super.use(level, player, usedHand);
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,49 @@
package com.leclowndu93150.carbort.datagen;

import com.leclowndu93150.carbort.Carbort;
import com.leclowndu93150.carbort.registries.CBItems;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.neoforged.neoforge.client.model.generators.ItemModelProvider;
import net.neoforged.neoforge.client.model.generators.ModelFile;
import net.neoforged.neoforge.common.data.ExistingFileHelper;

import java.util.function.Supplier;

public class CBItemModelProvider extends ItemModelProvider {
public CBItemModelProvider(PackOutput output, ExistingFileHelper existingFileHelper) {
super(output, Carbort.MODID, existingFileHelper);
}

@Override
protected void registerModels() {
basicItem(CBItems.BEAN);
basicItem(CBItems.SHRINKINATOR);
basicItem(CBItems.CHUNK_ANALYZER);
basicItem(CBItems.TORMENTED_SOUL);
basicItem(CBItems.GOLDEN_BEAN);
basicItem(CBItems.FIRE_IN_A_BOTTLE);
// basicItem(CBItems.UNSTABLE_INGOT);

handHeldItem(CBItems.BEAN_WAND);
handHeldItem(CBItems.PARTY_PICKAXE);
handHeldItem(CBItems.HEALING_AXE);
}

public void basicItem(Supplier<? extends Item> item) {
itemModel(item, "item/generated");
}

public void handHeldItem(Supplier<? extends Item> item) {
itemModel(item, "item/handheld");
}

private void itemModel(Supplier<? extends Item> item, String parent) {
ResourceLocation loc = BuiltInRegistries.ITEM.getKey(item.get());
getBuilder(item.get().toString())
.parent(new ModelFile.UncheckedModelFile(parent))
.texture("layer0", ResourceLocation.fromNamespaceAndPath(loc.getNamespace(), "item/" + loc.getPath()));
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.leclowndu93150.carbort.events;

import com.leclowndu93150.carbort.content.items.UnstableIngotItem;
import com.leclowndu93150.carbort.registries.DataComponentRegistry;
import net.minecraft.client.Minecraft;
import net.minecraft.world.item.ItemStack;
import net.neoforged.api.distmarker.Dist;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.leclowndu93150.carbort.events;

import com.leclowndu93150.carbort.Carbort;
import com.leclowndu93150.carbort.content.energy.ItemStackEnergyStorage;
import com.leclowndu93150.carbort.capabilties.ItemStackEnergyStorage;
import com.leclowndu93150.carbort.content.items.HealingAxeItem;
import com.leclowndu93150.carbort.content.energy.IEnergyItem;
import com.leclowndu93150.carbort.api.items.IEnergyItem;
import com.leclowndu93150.carbort.content.items.UnstableIngotItem;
import com.leclowndu93150.carbort.content.screen.ChunkAnalyzerScreen;
import com.leclowndu93150.carbort.networking.ChunkAnalyzerDataPayload;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static void chunkAnalyzerAction(ChunkAnalyzerTogglePayload payload, IPayl
.stream()
.map(BuiltInRegistries.BLOCK::getId)
.toList();
ChunkAnalyzerDataPayload payload1 = new ChunkAnalyzerDataPayload(blocks1, blocks.values().stream().toList());
ChunkAnalyzerDataPayload payload1 = new ChunkAnalyzerDataPayload(blocks1, blocks.values().intStream().boxed().toList());
PacketDistributor.sendToPlayer(serverPlayer, payload1);
} else {
PacketDistributor.sendToPlayer(serverPlayer, new ChunkAnalyzerTogglePayload((byte) 2));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
import com.leclowndu93150.carbort.Carbort;
import com.mojang.serialization.Codec;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.codec.ByteBufCodecs;
import net.neoforged.neoforge.registries.DeferredRegister;

import java.util.function.Supplier;

public final class CBDataComponents {
public static final DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister.createDataComponents(Carbort.MODID);
public static final DeferredRegister<DataComponentType<?>> DATA_COMPONENTS = DeferredRegister.create(BuiltInRegistries.DATA_COMPONENT_TYPE, Carbort.MODID);

public static final Supplier<DataComponentType<Integer>> ENERGY_STORAGE = DATA_COMPONENTS.register("energy",
() -> DataComponentType.<Integer>builder().persistent(Codec.INT).networkSynchronized(ByteBufCodecs.INT).build());
Expand Down
Loading

0 comments on commit 98c3ea8

Please sign in to comment.