Edit assets

This commit is contained in:
2024-06-23 22:51:41 +02:00
parent 16d7e58b8a
commit 06e5f220bd
26 changed files with 353 additions and 48 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+13
View File
@@ -17,6 +17,16 @@ repositories {
// See https://docs.gradle.org/current/userguide/declaring_repositories.html // See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories. // for more information about repositories.
maven { url 'https://maven.nucleoid.xyz' } maven { url 'https://maven.nucleoid.xyz' }
maven {
url 'https://kneelawk.com/maven/'
name 'Kneelawk Maven'
}
maven {
// For LibNetworkStack, if using 'syncing' module
url 'https://maven.alexiil.uk/'
name 'AlexIIL Maven'
}
} }
dependencies { dependencies {
@@ -32,6 +42,7 @@ dependencies {
modImplementation include("eu.pb4:polymer-resource-pack:${project.polymer_version}") modImplementation include("eu.pb4:polymer-resource-pack:${project.polymer_version}")
modImplementation include("eu.pb4:polymer-autohost:${project.polymer_version}") modImplementation include("eu.pb4:polymer-autohost:${project.polymer_version}")
modImplementation include("eu.pb4:polymer-blocks:${project.polymer_version}") modImplementation include("eu.pb4:polymer-blocks:${project.polymer_version}")
modImplementation include("eu.pb4:polymer-virtual-entity:${project.polymer_version}")
include(modImplementation("xyz.nucleoid:server-translations-api:${project.server_translations_api_version}")) include(modImplementation("xyz.nucleoid:server-translations-api:${project.server_translations_api_version}"))
modImplementation include("eu.pb4:sgui:${project.servergui_version}") modImplementation include("eu.pb4:sgui:${project.servergui_version}")
@@ -41,11 +52,13 @@ processResources {
inputs.property "version", project.version inputs.property "version", project.version
inputs.property "minecraft_version", project.minecraft_version inputs.property "minecraft_version", project.minecraft_version
inputs.property "loader_version", project.loader_version inputs.property "loader_version", project.loader_version
inputs.property "fabric_version", project.fabric_version
filteringCharset "UTF-8" filteringCharset "UTF-8"
filesMatching("fabric.mod.json") { filesMatching("fabric.mod.json") {
expand "version": project.version, expand "version": project.version,
"minecraft_version": project.minecraft_version, "minecraft_version": project.minecraft_version,
"fabric_version": project.fabric_version,
"loader_version": project.loader_version "loader_version": project.loader_version
} }
} }
+1 -1
View File
@@ -11,7 +11,7 @@ loader_version=0.15.11
fabric_version=0.100.3+1.21 fabric_version=0.100.3+1.21
# Mod Properties # Mod Properties
mod_version=2.6.1 mod_version=2.6.2
maven_group=systems.brn maven_group=systems.brn
archives_base_name=Server_storage archives_base_name=Server_storage
@@ -5,26 +5,49 @@ import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory;
import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry;
import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.util.Identifier;
import net.minecraft.world.GameRules; import net.minecraft.world.GameRules;
import systems.brn.server_storage.blockentities.HardDriveContainerBlockEntity;
import systems.brn.server_storage.blockentities.StorageBlockEntity; import systems.brn.server_storage.blockentities.StorageBlockEntity;
import systems.brn.server_storage.blocks.HardDriveContainerBlock;
import systems.brn.server_storage.blocks.StorageBlock; import systems.brn.server_storage.blocks.StorageBlock;
import systems.brn.server_storage.items.HardDriveContainerBlockItem;
import systems.brn.server_storage.items.HardDriveItem;
import systems.brn.server_storage.items.StorageBlockItem; import systems.brn.server_storage.items.StorageBlockItem;
public class ServerStorage implements ModInitializer { public class ServerStorage implements ModInitializer {
public static final String MODID = "serverstorage"; public static final String MOD_ID = "serverstorage";
public static final String MODELID = "storage";
public static final String STORAGE_MODEL_ID = "storage";
public static final String HARD_DRIVE_MODEL_ID = "drive";
public static final String HARD_DRIVE_CONTAINER_BLOCK_MODEL_ID = "drive_container";
public static BlockEntityType<HardDriveContainerBlockEntity> HARD_DRIVE_CONTAINER_BLOCK_ENTITY;
public static HardDriveContainerBlock HARD_DRIVE_CONTAINER_BLOCK;
public static StorageBlock STORAGE_BLOCK; public static StorageBlock STORAGE_BLOCK;
public static BlockEntityType<StorageBlockEntity> STORAGE_BLOCK_ENTITY; public static BlockEntityType<StorageBlockEntity> STORAGE_BLOCK_ENTITY;
public static final GameRules.Key<GameRules.BooleanRule> ServerStorage_Crafting_Enable = public static final GameRules.Key<GameRules.BooleanRule> ServerStorage_Crafting_Enable =
GameRuleRegistry.register("enableserverstoragecrafting", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(false)); GameRuleRegistry.register("enableserverstoragecrafting", GameRules.Category.MISC, GameRuleFactory.createBooleanRule(false));
public static Identifier id(String path) {
return Identifier.of(MOD_ID, path);
}
@Override @Override
public void onInitialize() public void onInitialize()
{ {
StorageBlock.register(); StorageBlock.register();
StorageBlockItem.register(); StorageBlockItem.register();
PolymerResourcePackUtils.addModAssets(MODID);
HardDriveContainerBlock.register();
HardDriveContainerBlockItem.register();
HardDriveItem.register();
PolymerResourcePackUtils.addModAssets(MOD_ID);
PolymerResourcePackUtils.markAsRequired(); PolymerResourcePackUtils.markAsRequired();
@@ -0,0 +1,13 @@
package systems.brn.server_storage.blockentities;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.util.math.BlockPos;
import static systems.brn.server_storage.ServerStorage.HARD_DRIVE_CONTAINER_BLOCK_ENTITY;
public class HardDriveContainerBlockEntity extends BlockEntity {
public HardDriveContainerBlockEntity(BlockPos pos, BlockState state) {
super(HARD_DRIVE_CONTAINER_BLOCK_ENTITY, pos, state);
}
}
@@ -0,0 +1,109 @@
package systems.brn.server_storage.blocks;
import eu.pb4.polymer.blocks.api.BlockModelType;
import eu.pb4.polymer.blocks.api.PolymerBlockModel;
import eu.pb4.polymer.blocks.api.PolymerBlockResourceUtils;
import eu.pb4.polymer.blocks.api.PolymerTexturedBlock;
import eu.pb4.polymer.core.api.block.PolymerBlockUtils;
import net.fabricmc.fabric.api.event.player.UseBlockCallback;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.component.DataComponentTypes;
import net.minecraft.component.type.WrittenBookContentComponent;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
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.Hand;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
import systems.brn.server_storage.ServerStorage;
import systems.brn.server_storage.blockentities.HardDriveContainerBlockEntity;
import systems.brn.server_storage.blockentities.StorageBlockEntity;
import systems.brn.server_storage.screens.StorageScreen;
import java.util.List;
import static systems.brn.server_storage.ServerStorage.*;
import static systems.brn.server_storage.lib.Util.generateBookContent;
public class HardDriveContainerBlock extends Block implements PolymerTexturedBlock, BlockEntityProvider {
String modelID;
BlockModelType blockModelType;
public HardDriveContainerBlock(Settings settings, BlockModelType type, String modelId) {
super(settings);
this.modelID = modelId;
this.blockModelType = type;
}
@Override
public BlockState getPolymerBlockState(BlockState state) {
return PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(id(this.modelID)));
}
public static void register() {
var modId = id(STORAGE_MODEL_ID);
HARD_DRIVE_CONTAINER_BLOCK = Registry.register(Registries.BLOCK, modId,
new HardDriveContainerBlock(Settings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, ServerStorage.HARD_DRIVE_CONTAINER_BLOCK_MODEL_ID));
UseBlockCallback.EVENT.register(HardDriveContainerBlock::onUse);
HARD_DRIVE_CONTAINER_BLOCK_ENTITY = Registry.register(
Registries.BLOCK_ENTITY_TYPE,
modId,
BlockEntityType.Builder.create(HardDriveContainerBlockEntity::new, HARD_DRIVE_CONTAINER_BLOCK).build(null)
);
PolymerBlockUtils.registerBlockEntity(STORAGE_BLOCK_ENTITY);
}
private static ActionResult onUse(PlayerEntity player, World world, Hand hand, BlockHitResult hitResult) {
BlockPos pos = hitResult.getBlockPos();
BlockState state = world.getBlockState(pos);
Block block = state.getBlock();
if (block instanceof HardDriveContainerBlock) {
if (!world.isClient && !player.isSpectator()) {
if (!player.isSneaking()) {
StorageScreen storageScreen = new StorageScreen((ServerPlayerEntity) player, pos, null);
storageScreen.open();
} else if (player.getStackInHand(hand).getItem() == Items.WRITTEN_BOOK) {
ItemStack book = player.getStackInHand(hand);
StorageBlockEntity storageBlockEntity = (StorageBlockEntity) world.getBlockEntity(pos);
assert storageBlockEntity != null;
List<RawFilteredPair<Text>> generatedContent = generateBookContent(storageBlockEntity.chests.inventory);
book.set(DataComponentTypes.WRITTEN_BOOK_CONTENT, new WrittenBookContentComponent(
RawFilteredPair.of("Item Listing"),
player.getGameProfile().getName(),
0,
generatedContent,
false
));
} else {
return ActionResult.PASS;
}
}
return ActionResult.SUCCESS;
}
return ActionResult.PASS;
}
@Nullable
@Override
public BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
return new StorageBlockEntity(pos, state);
}
}
@@ -37,27 +37,24 @@ import static systems.brn.server_storage.lib.Util.generateBookContent;
public class StorageBlock extends Block implements PolymerTexturedBlock, BlockEntityProvider { public class StorageBlock extends Block implements PolymerTexturedBlock, BlockEntityProvider {
private final BlockState polymerBlockState;
public StorageBlock(Settings settings, BlockModelType type, String modelId) { public StorageBlock(Settings settings, BlockModelType type, String modelId) {
super(settings); super(settings);
this.polymerBlockState = PolymerBlockResourceUtils.requestBlock(type, PolymerBlockModel.of(Identifier.of(ServerStorage.MODID, modelId)));
} }
@Override @Override
public BlockState getPolymerBlockState(BlockState state) { public BlockState getPolymerBlockState(BlockState state) {
return this.polymerBlockState; return PolymerBlockResourceUtils.requestBlock(BlockModelType.FULL_BLOCK, PolymerBlockModel.of(Identifier.of(MOD_ID, STORAGE_MODEL_ID)));
} }
public static void register() { public static void register() {
var modId = Identifier.of(ServerStorage.MODID, ServerStorage.MODELID); var modId = id(STORAGE_MODEL_ID);
STORAGE_BLOCK = Registry.register(Registries.BLOCK, modId, STORAGE_BLOCK = Registry.register(Registries.BLOCK, modId,
new StorageBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, ServerStorage.MODELID)); new StorageBlock(AbstractBlock.Settings.copy(Blocks.WHITE_WOOL), BlockModelType.FULL_BLOCK, ServerStorage.STORAGE_MODEL_ID));
UseBlockCallback.EVENT.register(StorageBlock::onUse); UseBlockCallback.EVENT.register(StorageBlock::onUse);
STORAGE_BLOCK_ENTITY = Registry.register( STORAGE_BLOCK_ENTITY = Registry.register(
Registries.BLOCK_ENTITY_TYPE, Registries.BLOCK_ENTITY_TYPE,
Identifier.of(MODID, MODELID), modId,
BlockEntityType.Builder.create(StorageBlockEntity::new, STORAGE_BLOCK).build(null) BlockEntityType.Builder.create(StorageBlockEntity::new, STORAGE_BLOCK).build(null)
); );
PolymerBlockUtils.registerBlockEntity(STORAGE_BLOCK_ENTITY); PolymerBlockUtils.registerBlockEntity(STORAGE_BLOCK_ENTITY);
@@ -74,8 +71,7 @@ public class StorageBlock extends Block implements PolymerTexturedBlock, BlockEn
StorageScreen storageScreen = new StorageScreen((ServerPlayerEntity) player, pos, null); StorageScreen storageScreen = new StorageScreen((ServerPlayerEntity) player, pos, null);
storageScreen.open(); storageScreen.open();
} } else if (player.getStackInHand(hand).getItem() == Items.WRITTEN_BOOK) {
else if(player.getStackInHand(hand).getItem() == Items.WRITTEN_BOOK) {
ItemStack book = player.getStackInHand(hand); ItemStack book = player.getStackInHand(hand);
StorageBlockEntity storageBlockEntity = (StorageBlockEntity) world.getBlockEntity(pos); StorageBlockEntity storageBlockEntity = (StorageBlockEntity) world.getBlockEntity(pos);
assert storageBlockEntity != null; assert storageBlockEntity != null;
@@ -0,0 +1,41 @@
package systems.brn.server_storage.items;
import eu.pb4.polymer.core.api.item.PolymerItem;
import eu.pb4.polymer.resourcepack.api.PolymerModelData;
import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.block.Block;
import net.minecraft.item.*;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
import systems.brn.server_storage.ServerStorage;
import static systems.brn.server_storage.ServerStorage.*;
public class HardDriveContainerBlockItem extends BlockItem implements PolymerItem {
private final PolymerModelData polymerModel;
public HardDriveContainerBlockItem(Item.Settings settings, Block block, Identifier identifier) {
super(block, settings);
this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, identifier);
}
@Override
public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
return this.polymerModel.item();
}
@Override
public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
return this.polymerModel.value();
}
public static void register() {
Identifier identifier= id(ServerStorage.HARD_DRIVE_CONTAINER_BLOCK_MODEL_ID);
Item item = Registry.register(Registries.ITEM, identifier, new HardDriveContainerBlockItem(new Item.Settings(), HARD_DRIVE_CONTAINER_BLOCK, identifier));
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item));
}
}
@@ -0,0 +1,43 @@
package systems.brn.server_storage.items;
import eu.pb4.polymer.core.api.item.PolymerItem;
import eu.pb4.polymer.resourcepack.api.PolymerModelData;
import eu.pb4.polymer.resourcepack.api.PolymerResourcePackUtils;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroups;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.Identifier;
import org.jetbrains.annotations.Nullable;
import systems.brn.server_storage.ServerStorage;
import static systems.brn.server_storage.ServerStorage.id;
public class HardDriveItem extends Item implements PolymerItem {
private final PolymerModelData polymerModel;
public HardDriveItem(Settings settings, Identifier identifier) {
super(settings);
this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, identifier);
}
@Override
public Item getPolymerItem(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
return this.polymerModel.item();
}
@Override
public int getPolymerCustomModelData(ItemStack itemStack, @Nullable ServerPlayerEntity player) {
return this.polymerModel.value();
}
public static void register() {
Identifier identifier = id(ServerStorage.HARD_DRIVE_MODEL_ID);
Item item = Registry.register(Registries.ITEM, identifier, new HardDriveItem(new Settings(), identifier));
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item));
}
}
@@ -14,13 +14,14 @@ import org.jetbrains.annotations.Nullable;
import systems.brn.server_storage.ServerStorage; import systems.brn.server_storage.ServerStorage;
import static systems.brn.server_storage.ServerStorage.STORAGE_BLOCK; import static systems.brn.server_storage.ServerStorage.STORAGE_BLOCK;
import static systems.brn.server_storage.ServerStorage.id;
public class StorageBlockItem extends BlockItem implements PolymerItem { public class StorageBlockItem extends BlockItem implements PolymerItem {
private final PolymerModelData polymerModel; private final PolymerModelData polymerModel;
public StorageBlockItem(Settings settings, Block block, String modelId) { public StorageBlockItem(Settings settings, Block block, Identifier identifier) {
super(block, settings); super(block, settings);
this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, Identifier.of(ServerStorage.MODID, modelId)); this.polymerModel = PolymerResourcePackUtils.requestModel(Items.BARRIER, identifier);
} }
@Override @Override
@@ -34,8 +35,8 @@ public class StorageBlockItem extends BlockItem implements PolymerItem {
} }
public static void register() { public static void register() {
var modId = Identifier.of(ServerStorage.MODID, ServerStorage.MODELID); Identifier identifier = id(ServerStorage.STORAGE_MODEL_ID);
Item item = Registry.register(Registries.ITEM, modId, new StorageBlockItem(new Item.Settings(), STORAGE_BLOCK, ServerStorage.MODELID)); Item item = Registry.register(Registries.ITEM, identifier, new StorageBlockItem(new Item.Settings(), STORAGE_BLOCK, identifier));
ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item)); ItemGroupEvents.modifyEntriesEvent(ItemGroups.FUNCTIONAL).register(content -> content.add(item));
} }
} }
@@ -1,17 +1,44 @@
package systems.brn.server_storage.lib; package systems.brn.server_storage.lib;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.recipe.CraftingRecipe; import net.minecraft.recipe.CraftingRecipe;
import net.minecraft.recipe.RecipeEntry; import net.minecraft.recipe.RecipeEntry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import static systems.brn.server_storage.lib.Util.addCountToLore;
public class CraftingEntry { public class CraftingEntry {
public final ItemStack itemStack; public final ArrayList<ItemStack> outputStacks;
public final RecipeEntry<CraftingRecipe> recipeEntry; public final RecipeEntry<CraftingRecipe> recipeEntry;
public final ArrayList<MyCraftingRecipe> myCraftingRecipeEntries; public final ArrayList<MyCraftingRecipe> myCraftingRecipeEntries;
public CraftingEntry(ItemStack itemStack, RecipeEntry<CraftingRecipe> recipeEntry) {
this.itemStack = itemStack; public CraftingEntry(ItemStack itemStack, RecipeEntry<CraftingRecipe> recipeEntry, HashMap<ItemStack, Integer> inputs, Integer maxCount) {
ArrayList<ItemStack> tempOutputStacks = new ArrayList<>();
ItemStack outputStack = itemStack.copy();
outputStack.setCount(maxCount);
outputStack = addCountToLore(itemStack.getCount() * maxCount, outputStack, "Total max: ");
outputStack = addCountToLore(itemStack.getCount(), outputStack, "Each craft: ");
outputStack = addCountToLore(maxCount, outputStack, "Max crafts: ");
tempOutputStacks.add(outputStack);
for (Map.Entry<ItemStack, Integer> entry : inputs.entrySet()) {
ItemStack stackIn = entry.getKey();
Integer count = entry.getValue();
if (count > 0 && stackIn.isEmpty() && stackIn.getItem().hasRecipeRemainder()) {
Item remainderItem = stackIn.getItem().getRecipeRemainder();
if (remainderItem != null) {
ItemStack remainderStack = new ItemStack(stackIn.getItem().getRecipeRemainder(), count);
tempOutputStacks.add(remainderStack);
}
}
}
this.outputStacks = tempOutputStacks;
this.recipeEntry = recipeEntry; this.recipeEntry = recipeEntry;
this.myCraftingRecipeEntries = new ArrayList<>();
} }
} }
@@ -10,6 +10,6 @@ public class MyCraftingRecipe {
HashMap<ItemStack, Integer> inputs = new HashMap<>(); HashMap<ItemStack, Integer> inputs = new HashMap<>();
HashMap<ItemStack, Integer> outputs = new HashMap<>(); HashMap<ItemStack, Integer> outputs = new HashMap<>();
MyCraftingRecipe(RecipeEntry<CraftingRecipe> recipeEntry) { MyCraftingRecipe(RecipeEntry<CraftingRecipe> recipeEntry) {
recipeEntry.value().getIngredients() recipeEntry.value().getIngredients();
} }
} }
@@ -5,6 +5,7 @@ import net.minecraft.component.type.LoreComponent;
import net.minecraft.inventory.Inventory; import net.minecraft.inventory.Inventory;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.recipe.*; import net.minecraft.recipe.*;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.text.RawFilteredPair; import net.minecraft.text.RawFilteredPair;
@@ -63,11 +64,12 @@ public class Util {
return pages; return pages;
} }
public static ItemStack addCountToLore(final int count, ItemStack stack) { public static ItemStack addCountToLore(final int count, ItemStack stack, String name) {
if (count > 0) { if (count > 0) {
ItemStack newStack = stack.copy(); ItemStack newStack = stack.copy();
LoreComponent lore = stack.get(DataComponentTypes.LORE); LoreComponent lore = stack.get(DataComponentTypes.LORE);
Text countLine = Text.literal("Amount: " + count).setStyle(Style.EMPTY.withColor(Formatting.GOLD).withItalic(true)); name = name != null ? name : "Amount: ";
Text countLine = Text.literal(name + count).setStyle(Style.EMPTY.withColor(Formatting.GOLD).withItalic(true));
LoreComponent newLore; LoreComponent newLore;
if (lore == null) { if (lore == null) {
@@ -113,6 +115,9 @@ public class Util {
for (RecipeEntry<CraftingRecipe> recipe : allRecipes) { for (RecipeEntry<CraftingRecipe> recipe : allRecipes) {
int maxAmount = -1; int maxAmount = -1;
boolean canMake = true; boolean canMake = true;
boolean needToAdd = true;
CraftingEntry finalEntry;
HashMap<ItemStack, Integer> finalInputs = new HashMap<>();
for (Ingredient ingredient : recipe.value().getIngredients()) { for (Ingredient ingredient : recipe.value().getIngredients()) {
HashMap<ItemStack, Integer> inputsTemp = new HashMap<>(); HashMap<ItemStack, Integer> inputsTemp = new HashMap<>();
for (ItemStack stack : ingredient.getMatchingStacks()) { for (ItemStack stack : ingredient.getMatchingStacks()) {
@@ -143,18 +148,23 @@ public class Util {
stackIn.setCount(count); stackIn.setCount(count);
inputs.put(stackIn, stackIn.getCount()); inputs.put(stackIn, stackIn.getCount());
} }
for (Map.Entry<ItemStack, Integer> entry : inputs.entrySet()) {
ItemStack stackIn = entry.getKey();
Integer count = entry.getValue();
boolean itemFound = false;
for (int i = 0; i < inventory.size(); i++) { for (int i = 0; i < inventory.size(); i++) {
ItemStack slotStack = inventory.getStack(i); ItemStack slotStack = inventory.getStack(i);
Item slotItem = slotStack.getItem(); Item slotItem = slotStack.getItem();
int slotCount = slotStack.getCount(); int slotCount = slotStack.getCount();
for (Map.Entry<ItemStack, Integer> entry : inputs.entrySet()) {
ItemStack stackIn = entry.getKey();
Integer count = entry.getValue();
if (stackIn.getItem() == slotItem) { if (stackIn.getItem() == slotItem) {
count -= slotCount; count -= slotCount;
entry.setValue(count); entry.setValue(count);
itemFound = true;
} }
} }
if (!itemFound) {
maxAmount = 0;
}
} }
for (Map.Entry<ItemStack, Integer> entry : inputs.entrySet()) { for (Map.Entry<ItemStack, Integer> entry : inputs.entrySet()) {
ItemStack stackIn = entry.getKey(); ItemStack stackIn = entry.getKey();
@@ -162,6 +172,9 @@ public class Util {
if (count > 0) { if (count > 0) {
canMake = false; canMake = false;
} else { } else {
if(recipe.value().getResult(server.getRegistryManager()).getItem() == Items.REDSTONE_BLOCK){
int asdasd = 0;
}
int thisMaxAmount = Math.floorDivExact(Math.abs(count), stackIn.getCount()); int thisMaxAmount = Math.floorDivExact(Math.abs(count), stackIn.getCount());
if (maxAmount == -1) { if (maxAmount == -1) {
maxAmount = thisMaxAmount; maxAmount = thisMaxAmount;
@@ -170,27 +183,31 @@ public class Util {
} }
} }
} }
if (maxAmount > 1 && canMake) { if (maxAmount > 0 && canMake && needToAdd) {
Item outputItem = recipe.value().getResult(server.getRegistryManager()).getItem(); ItemStack outputItem = recipe.value().getResult(server.getRegistryManager()).copy();
CraftingEntry entry = new CraftingEntry(new ItemStack(outputItem, maxAmount), recipe); finalEntry = new CraftingEntry(outputItem, recipe, inputs, maxAmount);
boolean needToAdd = true; finalInputs.putAll(inputs);
for (int i = 0; i < craftingEntries.size(); i++) { for (int i = 0; i < craftingEntries.size(); i++) {
CraftingEntry entryLoop = craftingEntries.get(i); CraftingEntry entryLoop = craftingEntries.get(i);
if (entryLoop.itemStack.getItem().equals(outputItem)) { for (ItemStack outputStack : entryLoop.outputStacks) {
if (ItemStack.areItemsAndComponentsEqual(outputStack, outputItem)) {
needToAdd = false; needToAdd = false;
if (maxAmount > entryLoop.itemStack.getCount()) { if (maxAmount > outputStack.getCount()) {
craftingEntries.set(i, entry); craftingEntries.set(i, finalEntry);
break; break;
} }
} }
} }
if (needToAdd) {
craftingEntries.add(entry);
} }
} else { } else {
break; break;
} }
} }
if (needToAdd && maxAmount > 0) {
ItemStack outputItem = recipe.value().getResult(server.getRegistryManager()).copy();
finalEntry = new CraftingEntry(outputItem, recipe, finalInputs, maxAmount);
craftingEntries.add(finalEntry);
}
} }
return craftingEntries; return craftingEntries;
} }
@@ -17,7 +17,6 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import static systems.brn.server_storage.lib.StorageOperations.*; import static systems.brn.server_storage.lib.StorageOperations.*;
import static systems.brn.server_storage.lib.Util.addCountToLore;
import static systems.brn.server_storage.lib.Util.getCraftableRecipes; import static systems.brn.server_storage.lib.Util.getCraftableRecipes;
public class CraftingScreen extends PagedGui { public class CraftingScreen extends PagedGui {
@@ -50,7 +49,7 @@ public class CraftingScreen extends PagedGui {
ArrayList<DisplayElement> recipes = new ArrayList<>(); ArrayList<DisplayElement> recipes = new ArrayList<>();
for (CraftingEntry craftingEntry : craftingEntries) { for (CraftingEntry craftingEntry : craftingEntries) {
ItemStack stackWithCount = addCountToLore(craftingEntry.itemStack.getCount(), craftingEntry.itemStack); ItemStack stackWithCount = craftingEntry.outputStacks.getFirst().copy();
if (stackWithCount.getCount() > stackWithCount.getMaxCount()) { if (stackWithCount.getCount() > stackWithCount.getMaxCount()) {
stackWithCount.setCount(stackWithCount.getMaxCount()); stackWithCount.setCount(stackWithCount.getMaxCount());
} }
@@ -64,7 +64,7 @@ public class StorageScreen extends PagedGui {
protected DisplayElement getElement(int id) { protected DisplayElement getElement(int id) {
if (blockEntity.chests.inventory.size() > id) { if (blockEntity.chests.inventory.size() > id) {
ItemStack itemStack = blockEntity.chests.inventory.getStack(id); ItemStack itemStack = blockEntity.chests.inventory.getStack(id);
ItemStack newStack = addCountToLore(itemStack.getCount(), itemStack); ItemStack newStack = addCountToLore(itemStack.getCount(), itemStack, null);
GuiElementBuilder guiElement = new GuiElementBuilder(newStack); GuiElementBuilder guiElement = new GuiElementBuilder(newStack);
return DisplayElement.of(guiElement); return DisplayElement.of(guiElement);
} }
@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "serverstorage:block/drive_container"
}
}
}
@@ -1,4 +1,5 @@
{ {
"block.serverstorage.storage": "Chest storage controller", "block.serverstorage.storage": "Chest storage controller",
"block.serverstorage.fast_hopper": "Fast hopper" "block.serverstorage.drive": "Hard drive",
"block.serverstorage.drive_container": "Hard drive container"
} }
@@ -0,0 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "serverstorage:block/drive_container"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "minecraft:item/drive"
}
}
@@ -0,0 +1,3 @@
{
"parent": "storage:block/drive_container"
}