Add books
This commit is contained in:
parent
3301cf2d8b
commit
cb67687707
@ -8,7 +8,7 @@ yarn_mappings=1.20.6+build.3
|
|||||||
loader_version=0.15.11
|
loader_version=0.15.11
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version=1.0
|
mod_version=1.1
|
||||||
maven_group=systems.brn
|
maven_group=systems.brn
|
||||||
archives_base_name=Server_storage
|
archives_base_name=Server_storage
|
||||||
|
|
||||||
|
@ -9,10 +9,17 @@ import net.minecraft.block.AbstractBlock;
|
|||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.component.DataComponentTypes;
|
||||||
|
import net.minecraft.component.type.WrittenBookContentComponent;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.inventory.Inventory;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.registry.Registries;
|
import net.minecraft.registry.Registries;
|
||||||
import net.minecraft.registry.Registry;
|
import net.minecraft.registry.Registry;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.text.RawFilteredPair;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
@ -22,7 +29,11 @@ import net.minecraft.world.World;
|
|||||||
import systems.brn.server_storage.ServerStorage;
|
import systems.brn.server_storage.ServerStorage;
|
||||||
import systems.brn.server_storage.screens.StorageScreen;
|
import systems.brn.server_storage.screens.StorageScreen;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static systems.brn.server_storage.ServerStorage.STORAGE_BLOCK;
|
import static systems.brn.server_storage.ServerStorage.STORAGE_BLOCK;
|
||||||
|
import static systems.brn.server_storage.lib.StorageOperations.getCombinedInventoryFromChests;
|
||||||
|
import static systems.brn.server_storage.lib.Util.generateBookContent;
|
||||||
|
|
||||||
public class StorageBlock extends Block implements PolymerTexturedBlock {
|
public class StorageBlock extends Block implements PolymerTexturedBlock {
|
||||||
|
|
||||||
@ -51,9 +62,22 @@ public class StorageBlock extends Block implements PolymerTexturedBlock {
|
|||||||
Block block = state.getBlock();
|
Block block = state.getBlock();
|
||||||
|
|
||||||
if (block instanceof StorageBlock) {
|
if (block instanceof StorageBlock) {
|
||||||
if (!world.isClient) {
|
if (!world.isClient && !player.isSpectator()) {
|
||||||
|
if (player.isSneaking() && player.getStackInHand(hand).getItem() == Items.WRITTEN_BOOK) {
|
||||||
|
ItemStack book = player.getStackInHand(hand);
|
||||||
|
Inventory inventory = getCombinedInventoryFromChests(world, pos);
|
||||||
|
List<RawFilteredPair<Text>> generatedContent = generateBookContent(inventory);
|
||||||
|
book.set(DataComponentTypes.WRITTEN_BOOK_CONTENT, new WrittenBookContentComponent(
|
||||||
|
RawFilteredPair.of("Item Listing"),
|
||||||
|
player.getGameProfile().getName(),
|
||||||
|
0,
|
||||||
|
generatedContent,
|
||||||
|
false
|
||||||
|
));
|
||||||
|
} else {
|
||||||
new StorageScreen((ServerPlayerEntity) player, pos).open();
|
new StorageScreen((ServerPlayerEntity) player, pos).open();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return ActionResult.SUCCESS;
|
return ActionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
return ActionResult.PASS;
|
return ActionResult.PASS;
|
||||||
|
@ -167,7 +167,7 @@ public class StorageOperations {
|
|||||||
// Create a new ItemStack with the item type and the correct count
|
// Create a new ItemStack with the item type and the correct count
|
||||||
ItemStack stack = new ItemStack(item, count);
|
ItemStack stack = new ItemStack(item, count);
|
||||||
// Populate the inventory with the item stack
|
// Populate the inventory with the item stack
|
||||||
inv.setStack(invPointer, stack);
|
inv.heldStacks.set(invPointer, stack);
|
||||||
invPointer++;
|
invPointer++;
|
||||||
}
|
}
|
||||||
return inv;
|
return inv;
|
||||||
|
56
src/main/java/systems/brn/server_storage/lib/Util.java
Normal file
56
src/main/java/systems/brn/server_storage/lib/Util.java
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package systems.brn.server_storage.lib;
|
||||||
|
|
||||||
|
import net.minecraft.inventory.Inventory;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.text.RawFilteredPair;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Util {
|
||||||
|
|
||||||
|
public static List<RawFilteredPair<Text>> generateBookContent(Inventory inventory) {
|
||||||
|
List<String> pages = new ArrayList<>();
|
||||||
|
for (int i = 0; i < inventory.size(); i++) {
|
||||||
|
ItemStack slotStack = inventory.getStack(i);
|
||||||
|
if (!slotStack.isEmpty()) {
|
||||||
|
Item itemName = slotStack.getItem();
|
||||||
|
pages.add(String.valueOf(itemName) + " " + slotStack.getCount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return stringToBookContent(String.join(System.lineSeparator(), pages));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<RawFilteredPair<Text>> stringToBookContent(String string) {
|
||||||
|
List<RawFilteredPair<Text>> pages = new ArrayList<>();
|
||||||
|
List<String> lines = new ArrayList<>();
|
||||||
|
String[] words = string.split("\\s+");
|
||||||
|
|
||||||
|
StringBuilder currentLine = new StringBuilder();
|
||||||
|
for (String word : words) {
|
||||||
|
if (currentLine.length() + word.length() + 1 <= 21) { // Max line length in Minecraft
|
||||||
|
currentLine.append(word).append(" ");
|
||||||
|
} else {
|
||||||
|
lines.add(currentLine.toString().trim());
|
||||||
|
currentLine = new StringBuilder(word + " ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lines.add(currentLine.toString().trim());
|
||||||
|
|
||||||
|
List<String> pageContent = new ArrayList<>();
|
||||||
|
for (int i = 0; i < lines.size(); i++) {
|
||||||
|
if (i % 14 == 0 && i != 0) { // Max lines per page in Minecraft
|
||||||
|
pages.add(RawFilteredPair.of(Text.literal(String.join("\n", pageContent))));
|
||||||
|
pageContent.clear();
|
||||||
|
}
|
||||||
|
pageContent.add(lines.get(i));
|
||||||
|
}
|
||||||
|
if (!pageContent.isEmpty()) {
|
||||||
|
pages.add(RawFilteredPair.of(Text.literal(String.join("\n", pageContent))));
|
||||||
|
}
|
||||||
|
|
||||||
|
return pages;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user