diff --git a/gradle.properties b/gradle.properties index fa6fb29..3af1f63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ loader_version=0.12.12 # Mod Properties - mod_version = 1.18.1.3 + mod_version = 1.18.1.4 maven_group = de.jottyfan.minecraft archives_base_name = quickiefabric diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java index c589d73..355aad9 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java @@ -16,7 +16,7 @@ import net.minecraft.sound.SoundEvents; import net.minecraft.util.Hand; /** - * + * * @author jotty * */ @@ -104,7 +104,7 @@ public class BackpackInventory extends SimpleInventory { /** * get the items from the itemStack that contains the backpack - * + * * @param itemStack the itemStack of the backpack * @return the list of found itemStacks in the backpack */ @@ -125,7 +125,7 @@ public class BackpackInventory extends SimpleInventory { /** * set the items in the itemStack that contains the backpack - * + * * @param itemStack the backpack's itemStack * @param itemStacks the collection of lists of itemStacks for the backpack */ @@ -156,4 +156,21 @@ public class BackpackInventory extends SimpleInventory { tag.put(NBT_ITEMS, listTag); itemStack.getOrCreateNbt().put(NBT_BACKPACK, tag); } + + /** + * replace every slot of the backpack with the content of backpackInventory + * + * @param itemStack the backpack's itemStack + * @param backpackInventory the replacement inventory + */ + public static void setItemsToBackpack(ItemStack itemStack, BackpackInventory backpackInventory) { + Collection> itemStacks = new ArrayList<>(); + List firstList = new ArrayList<>(); + for (int i = 0; i < backpackInventory.size(); i++) { + ItemStack stack = backpackInventory.getStack(i); + firstList.add(stack); + } + itemStacks.add(firstList); + setItemsToBackpack(itemStack, itemStacks); + } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java index 0439504..c63fa94 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java @@ -1,8 +1,5 @@ package de.jottyfan.minecraft.quickiefabric.container; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - import de.jottyfan.minecraft.quickiefabric.init.RegistryManager; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -14,12 +11,13 @@ import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvents; import net.minecraft.util.Hand; +import net.minecraft.util.math.BlockPos; public class BackpackScreenHandler extends ScreenHandler { - private static final Logger LOGGER = LogManager.getLogger(BackpackScreenHandler.class); - private final BackpackInventory backpackInventory; private final PlayerEntity player; private final ItemStack thisStack; @@ -68,41 +66,41 @@ public class BackpackScreenHandler extends ScreenHandler { super.close(player); } + @Override + public ItemStack transferSlot(PlayerEntity player, int index) { + ItemStack itemStack = ItemStack.EMPTY; + Slot slot = (Slot) this.slots.get(index); + if (slot != null && slot.hasStack()) { + ItemStack itemStack2 = slot.getStack(); + itemStack = itemStack2.copy(); + if (index < 54 ? !this.insertItem(itemStack2, 54, this.slots.size(), true) : !this.insertItem(itemStack2, 0, 54, false)) { + return ItemStack.EMPTY; + } + if (itemStack2.isEmpty()) { + slot.setStack(ItemStack.EMPTY); + } else { + slot.markDirty(); + } + } + return itemStack; + } + @Override public void onSlotClick(int slotId, int quickCraftData, SlotActionType actionType, PlayerEntity playerEntity) { + if (SlotActionType.QUICK_CRAFT.equals(actionType)) { + return; + } Slot slot = slotId >= 0 && slotId < this.slots.size() ? this.slots.get(slotId) : null; ItemStack stack = slot == null ? ItemStack.EMPTY : slot.getStack(); - if (actionType.equals(SlotActionType.PICKUP) || actionType.equals(SlotActionType.PICKUP_ALL) - || actionType.equals(SlotActionType.SWAP)) { - super.onSlotClick(slotId, quickCraftData, actionType, playerEntity); - } else if (actionType.equals(SlotActionType.THROW)) { // pickup from the active items line - if (stack.getName().equals(thisStack.getName())) { - return; // omit to put the backpack into itself; as a side effect, omits adding same - // colored backpacks into this one - } else { - // do not throw but pickup + if (!stack.getName().equals(thisStack.getName())) { + if (SlotActionType.THROW.equals(actionType)) { super.onSlotClick(slotId, quickCraftData, SlotActionType.PICKUP, playerEntity); - } - } else if (actionType.equals(SlotActionType.QUICK_CRAFT)) { // drag - but does not drag the right slot content, stack is empty - if (slotId < 0) { - return; // do not execute anything if slotId is < 0 as sometimes -999 - } - if (playerEntity.world.isClient) { - LOGGER.debug("ignoring action type {} on slotId {} for {} x {}", actionType.toString(), slotId, - stack.getCount(), stack.getItem().toString()); - } - } else if (actionType.equals(SlotActionType.QUICK_MOVE)) { // shift click - if (stack.getName().equals(thisStack.getName())) { - return; // omit to put the backpack into itself; as a side effect, omits adding same - // colored backpacks into this one } else { - // do not move but pickup all - super.onSlotClick(slotId, quickCraftData, SlotActionType.PICKUP_ALL, playerEntity); + super.onSlotClick(slotId, quickCraftData, actionType, playerEntity); } } else { if (playerEntity.world.isClient) { - LOGGER.debug("ignoring action type {} on slotId {} for {} x {}", actionType.toString(), slotId, - stack.getCount(), stack.getItem().toString()); + playerEntity.world.playSound(null, new BlockPos(playerEntity.getPos()), SoundEvents.ENTITY_VILLAGER_NO, SoundCategory.PLAYERS, 1f, 1f); } } } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java index ac6fb47..158b2b3 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/init/RegistryManager.java @@ -125,6 +125,7 @@ public class RegistryManager { stacks.add(new ItemStack(QuickieItems.BACKPACK_ORANGE)); stacks.add(new ItemStack(QuickieItems.BACKPACK_PURPLE)); stacks.add(new ItemStack(QuickieItems.BACKPACK_LIGHTBLUE)); + stacks.add(new ItemStack(QuickieItems.BAG)); stacks.add(new ItemStack(QuickieItems.STUB)); stacks.add(new ItemStack(QuickieTools.SPEEDPOWDERAXE)); stacks.add(new ItemStack(QuickieTools.SPEEDPOWDERPICKAXE)); @@ -241,6 +242,7 @@ public class RegistryManager { registerItem(QuickieItems.BACKPACK_ORANGE, "backpack_orange"); registerItem(QuickieItems.BACKPACK_PURPLE, "backpack_purple"); registerItem(QuickieItems.BACKPACK_LIGHTBLUE, "backpack_lightblue"); + registerItem(QuickieItems.BAG, "bag"); registerItem(QuickieItems.STUB, "stub"); ComposterBlock.ITEM_TO_LEVEL_INCREASE_CHANCE.put(QuickieItems.COTTONSEED, 0.5f); diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/item/ModdedItemUsageContext.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/item/ModdedItemUsageContext.java new file mode 100644 index 0000000..397893b --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/item/ModdedItemUsageContext.java @@ -0,0 +1,21 @@ +package de.jottyfan.minecraft.quickiefabric.item; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class ModdedItemUsageContext extends ItemUsageContext { + + public ModdedItemUsageContext(World world, PlayerEntity player, Hand hand, ItemStack stack, BlockHitResult hit) { + super(world, player, hand, stack, hit); + } + +} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemBackpack.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemBackpack.java index 87fb85b..94b0985 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemBackpack.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemBackpack.java @@ -34,7 +34,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; /** - * + * * @author jotty * */ @@ -78,7 +78,7 @@ public class ItemBackpack extends Item { /** * sort the content of the backpack; for spreaded items, combine them until the itemstack size is reached - * + * * @param itemStack the itemStack of the backpack * @return the itemStack of the sorted backpack */ @@ -91,7 +91,7 @@ public class ItemBackpack extends Item { List foundStacks = map.get(id); if (foundStacks == null) { foundStacks = new ArrayList<>(); - map.put(id, foundStacks); + map.put(id, foundStacks); } foundStacks.add(stack); } diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemBag.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemBag.java new file mode 100644 index 0000000..3dd0d87 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/ItemBag.java @@ -0,0 +1,63 @@ +package de.jottyfan.minecraft.quickiefabric.items; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import de.jottyfan.minecraft.quickiefabric.container.BackpackInventory; +import de.jottyfan.minecraft.quickiefabric.item.ModdedItemUsageContext; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemUsageContext; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +/** + * + * @author jotty + * + */ +public class ItemBag extends ItemBackpack { + + @Override + public ActionResult useOnBlock(ItemUsageContext context) { + BlockPos pos = context.getBlockPos(); + World world = context.getWorld(); + PlayerEntity player = context.getPlayer(); + BlockState blockState = world.getBlockState(pos); + Block block = blockState.getBlock(); + if (Blocks.FARMLAND.equals(block)) { + if (!world.isClient) { + player.sendMessage(new TranslatableText("msg.notyetimplemented"), false); + } +// BackpackInventory bi = new BackpackInventory(context.getStack()); +// for (int slot = 0; slot < ItemBackpack.SLOTSIZE; slot++) { +// ItemStack stack = bi.getStack(slot); +// if (stack.getCount() > 0) { +// Item item = stack.getItem(); +// BlockPos newPos = pos; // TODO: replace by iteration +// Vec3d newHitPos = context.getHitPos(); // TODO: replace by iteration +// BlockHitResult hit = new BlockHitResult(newHitPos, context.getSide(), newPos, context.hitsInsideBlock()); +// ModdedItemUsageContext iuc = new ModdedItemUsageContext(world, player, Hand.MAIN_HAND, stack, hit); +// if (item.useOnBlock(iuc).equals(ActionResult.PASS)) { +// bi.setStack(slot, stack); +// } +// } +// } +// ItemStack thisBackpack = player.getActiveItem(); +// BackpackInventory.setItemsToBackpack(thisBackpack, bi); + return ActionResult.SUCCESS; + } else { + return super.useOnBlock(context); + } + } +} diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/QuickieItems.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/QuickieItems.java index c4d4b7b..f790fa7 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/items/QuickieItems.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/items/QuickieItems.java @@ -1,7 +1,7 @@ package de.jottyfan.minecraft.quickiefabric.items; /** - * + * * @author jotty * */ @@ -27,6 +27,7 @@ public class QuickieItems { public static final ItemBackpack BACKPACK_ORANGE = new ItemBackpack(); public static final ItemBackpack BACKPACK_PURPLE = new ItemBackpack(); public static final ItemBackpack BACKPACK_LIGHTBLUE = new ItemBackpack(); + public static final ItemBag BAG = new ItemBag(); public static final ItemRottenFleshStripes ROTTEN_FLESH_STRIPES = new ItemRottenFleshStripes(); public static final ItemCarrotstack CARROTSTACK = new ItemCarrotstack(); public static final ItemCotton COTTON = new ItemCotton(); diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/ToolSpeedpowderHoe.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/ToolSpeedpowderHoe.java index 8111b6b..c5d9fc5 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/ToolSpeedpowderHoe.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/tools/ToolSpeedpowderHoe.java @@ -86,7 +86,9 @@ public class ToolSpeedpowderHoe extends HoeItem implements ToolRangeable { @Override public boolean canBreakNeighbors(BlockState blockState) { return ToolManager.handleIsEffectiveOn(blockState, new ItemStack(this), null) - || Blocks.GRASS.equals(blockState.getBlock()); + || Blocks.GRASS.equals(blockState.getBlock()) + || Blocks.FERN.equals(blockState.getBlock()) + || Blocks.LARGE_FERN.equals(blockState.getBlock()); } diff --git a/src/main/resources/assets/quickiefabric/lang/de_de.json b/src/main/resources/assets/quickiefabric/lang/de_de.json index 6f75d83..3f55c7c 100644 --- a/src/main/resources/assets/quickiefabric/lang/de_de.json +++ b/src/main/resources/assets/quickiefabric/lang/de_de.json @@ -29,6 +29,7 @@ "item.quickiefabric.backpack_orange": "orangener Rucksack", "item.quickiefabric.backpack_purple": "lilaner Rucksack", "item.quickiefabric.backpack_lightblue": "hellblauer Rucksack", + "item.quickiefabric.bag": "Beutel", "item.quickiefabric.rotten_flesh_stripes": "geschnittenes Gammelfleisch", "item.quickiefabric.carrotstack": "Karottenbündel", "item.quickiefabric.cotton": "Baumwolle", diff --git a/src/main/resources/assets/quickiefabric/lang/en_us.json b/src/main/resources/assets/quickiefabric/lang/en_us.json index 2ebc32d..5292adb 100644 --- a/src/main/resources/assets/quickiefabric/lang/en_us.json +++ b/src/main/resources/assets/quickiefabric/lang/en_us.json @@ -29,6 +29,7 @@ "item.quickiefabric.backpack_orange": "orange backpack", "item.quickiefabric.backpack_purple": "purple backpack", "item.quickiefabric.backpack_lightblue": "light blue backpack", + "item.quickiefabric.bag": "bag", "item.quickiefabric.rotten_flesh_stripes": "rotten flesh stripes", "item.quickiefabric.carrotstack": "a bundle of carrots", "item.quickiefabric.cotton": "cotton", diff --git a/src/main/resources/assets/quickiefabric/models/item/bag.json b/src/main/resources/assets/quickiefabric/models/item/bag.json new file mode 100644 index 0000000..a5f0500 --- /dev/null +++ b/src/main/resources/assets/quickiefabric/models/item/bag.json @@ -0,0 +1,7 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "quickiefabric:item/bag_empty", + "layer1": "quickiefabric:item/bag_full" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickiefabric/textures/item/bag_empty.png b/src/main/resources/assets/quickiefabric/textures/item/bag_empty.png new file mode 100644 index 0000000..7699c2e Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/item/bag_empty.png differ diff --git a/src/main/resources/assets/quickiefabric/textures/item/bag_full.png b/src/main/resources/assets/quickiefabric/textures/item/bag_full.png new file mode 100644 index 0000000..f346eb2 Binary files /dev/null and b/src/main/resources/assets/quickiefabric/textures/item/bag_full.png differ diff --git a/src/main/resources/data/quickiefabric/recipes/bag.json b/src/main/resources/data/quickiefabric/recipes/bag.json new file mode 100644 index 0000000..fb7465c --- /dev/null +++ b/src/main/resources/data/quickiefabric/recipes/bag.json @@ -0,0 +1,16 @@ +{ + "type": "crafting_shaped", + "pattern": [ + " ", + "c c", + " c " + ], + "key": { + "c": { + "item": "minecraft:wheat" + } + }, + "result": { + "item": "quickiefabric:bag" + } +} \ No newline at end of file