fix loads of bugs

This commit is contained in:
Soph :3 2025-10-05 15:33:55 +03:00
parent 8c83b2aaf3
commit be29556850
8 changed files with 18 additions and 41 deletions

View file

@ -6,7 +6,7 @@ minecraft_version=1.21.8
yarn_mappings=1.21.8+build.1
loader_version=0.17.2
# Mod Properties
mod_version=0.2
mod_version=0.3
maven_group=ovh.sad
archives_base_name=growglobe
# Dependencies

View file

@ -12,7 +12,6 @@ public class GrowglobeClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
BlockRenderLayerMap.putBlock(GrowGlobeBlocks.GROW_GLOBE_BLOCK, BlockRenderLayer.CUTOUT);
GrowGlobeScreenHandlers.register();
HandledScreens.register(GrowGlobeScreenHandlers.GROW_GLOBE, GrowGlobeScreen::new);
BlockEntityRendererFactories.register(GrowGlobeBlockEntities.GROW_GLOBE, GrowGlobeBlockEntityRenderer::new);
}

View file

@ -34,19 +34,14 @@ public class GrowGlobeBlock extends BlockWithEntity {
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (!world.isClient) {
BlockEntity blockEntity = world.getBlockEntity(pos);
System.out.println("one");
if (blockEntity instanceof GrowGlobeBlockEntity screenHandlerFactory) {
System.out.println("two");
if (player instanceof ServerPlayerEntity serverPlayer) {
System.out.println("three");
serverPlayer.openHandledScreen(screenHandlerFactory);
}
player.openHandledScreen(screenHandlerFactory);
}
}
return ActionResult.SUCCESS;
}
@Override
protected MapCodec<? extends BlockWithEntity> getCodec() {
return CODEC;

View file

@ -11,7 +11,6 @@ import net.minecraft.inventory.SidedInventory;
import net.minecraft.inventory.SimpleInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.screen.ArrayPropertyDelegate;
import net.minecraft.screen.PropertyDelegate;
import net.minecraft.screen.ScreenHandler;
@ -33,7 +32,7 @@ import java.util.List;
import static ovh.sad.growglobe.HarvestUtil.harvestBlock;
public class GrowGlobeBlockEntity extends BlockEntity implements ExtendedScreenHandlerFactory, SidedInventory {
public class GrowGlobeBlockEntity extends BlockEntity implements ExtendedScreenHandlerFactory<BlockPos>, SidedInventory {
public static final long CAPACITY = 10000;
public static final long MAX_INSERT = 200;
public static final long MAX_EXTRACT = 0;
@ -186,12 +185,10 @@ public class GrowGlobeBlockEntity extends BlockEntity implements ExtendedScreenH
}
@Override
public Object getScreenOpeningData(ServerPlayerEntity player) {
return this.getPos();
public BlockPos getScreenOpeningData(ServerPlayerEntity player) {
return this.pos;
}
// --- Inventory delegation ---
@Override
public int size() {

View file

@ -6,6 +6,7 @@ import net.minecraft.inventory.Inventory;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.PropertyDelegate;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.screen.slot.Slot;
public class GrowGlobeScreenHandler extends ScreenHandler {
@ -46,6 +47,11 @@ public class GrowGlobeScreenHandler extends ScreenHandler {
}
}
@Override
public ScreenHandlerType<GrowGlobeScreenHandler> getType() {
return GrowGlobeScreenHandlers.GROW_GLOBE;
}
@Override
public ItemStack quickMove(PlayerEntity player, int index) {
ItemStack newStack = ItemStack.EMPTY;
@ -99,7 +105,7 @@ public class GrowGlobeScreenHandler extends ScreenHandler {
@Override
public boolean canUse(PlayerEntity player) {
return inventory.canPlayerUse(player);
return true;
}
public int getEnergy() {

View file

@ -7,7 +7,6 @@ import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
// ModScreenHandlers.java
public class GrowGlobeScreenHandlers {
public static ScreenHandlerType<GrowGlobeScreenHandler> GROW_GLOBE;
@ -16,18 +15,15 @@ public class GrowGlobeScreenHandlers {
Registries.SCREEN_HANDLER,
Identifier.of(Growglobe.MOD_ID, "growglobe"),
new ExtendedScreenHandlerType<>(
// Decoder: called on client
(syncId, playerInv, buf) -> {
BlockPos pos = buf;
(syncId, playerInv, pos) -> {
var be = playerInv.player.getWorld().getBlockEntity(pos);
if (be instanceof GrowGlobeBlockEntity blockEntity) {
return new GrowGlobeScreenHandler(syncId, playerInv, blockEntity.getInventory(), blockEntity.getPropertyDelegate());
}
// Fallback if BE missing
return new GrowGlobeScreenHandler(syncId, playerInv, new net.minecraft.inventory.SimpleInventory(7), new net.minecraft.screen.ArrayPropertyDelegate(2));
},
// PacketCodec to sync BlockPos
BlockPos.PACKET_CODEC
)
);

View file

@ -1,7 +1,6 @@
package ovh.sad.growglobe;
import net.fabricmc.api.ModInitializer;
import net.minecraft.world.World;
public class Growglobe implements ModInitializer {
public static String MOD_ID = "growglobe";
@ -9,6 +8,7 @@ public class Growglobe implements ModInitializer {
@Override
public void onInitialize() {
GrowGlobeBlocks.initialize();
GrowGlobeScreenHandlers.register();
GrowGlobeBlockEntities.register();
}
}

View file

@ -4,33 +4,19 @@ import net.minecraft.block.*;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.BlockTags;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.TreeFeatureConfig;
import net.minecraft.world.gen.foliage.SpruceFoliagePlacer;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class HarvestUtil {
/**
* Dynamically harvests any block or item and returns the resulting drops.
* Works with vanilla and modded blocks.
*
* @param world the world
* @param item the Item (usually BlockItem) to harvest
* @param pos the position (optional for context; can be BlockPos.ORIGIN)
* @return List of ItemStacks that would drop
*/
public static List<ItemStack> harvestBlock(ServerWorld world, Item item, BlockPos pos) {
List<ItemStack> drops = new ArrayList<>();
@ -41,13 +27,11 @@ public class HarvestUtil {
BlockEntityProvider blockEntityProvider = block instanceof BlockEntityProvider bep ? bep : null;
// CropBlock: drop crop + seeds
if (block instanceof CropBlock crop) {
state = crop.withAge(crop.getMaxAge());
}
// Stackable plants like sugar cane or bamboo
else if (block instanceof SugarCaneBlock) {
int height = 3; // or dynamically detect in world
int height = 3;
for (int i = 0; i < height; i++) drops.add(new ItemStack(block));
return drops;
}