Skip to content
Merged

Dev #25

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ neo_version=26.1.2.75
mod_id=cakesticklib
mod_name=CakeStickLib
mod_license=Ora Et Labora License
mod_version=1.13.1-hotfix1
mod_version=1.14
mod_group_id=com.devdyna.cakestick
mod_authors=DevDyna
mod_description=A standalone port of Synergy API to unify most of the code
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
"cakesticklib.jei.copper_oxidation": "Copper Oxidation Info",
"cakesticklib.jei.patina_drop": "§7Drop %s§7 items every scrape",
"cakesticklib.jei.strippable": "Block Strippable Info",
"cakesticklib.keep.storage": "§7Contain some items",
"cakesticklib.provider.every_tick": "Generate %s %s every tick",
"cakesticklib.provider.generic": "Generate %s %s every %d ticks",
"cakesticklib.redstone_acid.tip": "§7Oxidize copper blocks",
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/com/devdyna/cakesticklib/api/ToolTipHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.devdyna.cakesticklib.api;

import static com.devdyna.cakesticklib.CakeStickLib.MODULE_ID;

import java.util.List;

import net.minecraft.client.Minecraft;
import net.minecraft.network.chat.Component;

public class ToolTipHelper {
public static final int INDEX = 1;

public static void addToggle(List<Component> t, boolean c, String... k) {
if (c)
if (!Minecraft.getInstance().hasShiftDown())
add(t, MODULE_ID + ".hold.shift");
else
add(t, k);

}

public static void add(List<Component> t, String... k) {
for (String s : k)
t.add(INDEX, Component.translatable(s));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.devdyna.cakesticklib.api.aspect.logic;

import java.util.List;

import com.devdyna.cakesticklib.api.utils.x;
import com.devdyna.cakesticklib.setup.registry.LibComponents;

import net.minecraft.core.BlockPos;
import net.minecraft.util.ProblemReporter;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.CustomData;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.TagValueInput;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.level.storage.loot.LootParams.Builder;

public interface BlockItemKeeper {

abstract List<ItemStack> getDrops(BlockState state, Builder builder);
abstract void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity entity,
ItemStack stack);

default List<ItemStack> getResultDrops(List<ItemStack> l, ItemLike i, BlockState s, Builder b) {
var drops = l;
var be = b.getParameter(LootContextParams.BLOCK_ENTITY);

if (be instanceof ItemStorageBlock storage && !storage.isSlotsEmpty()) {
var item = x.item(i);
var tag = be.saveCustomOnly(b.getLevel().registryAccess());
if (!tag.isEmpty())
item.set(LibComponents.ITEM_CONTAINER, CustomData.of(tag));

drops.clear();
drops.add(item);
}

return drops;
}

default void placeBlockAndItems(Level level, BlockPos pos, BlockState state, LivingEntity entity,
ItemStack stack) {

if (level.isClientSide())
return;

if (!(entity instanceof Player))
return;

var be = level.getBlockEntity(pos);

if (!(be instanceof ItemStorageBlock))
return;

if (!stack.has(LibComponents.ITEM_CONTAINER))
return;

var nbt = stack.get(LibComponents.ITEM_CONTAINER).copyTag();

if (!nbt.isEmpty())
be.loadCustomOnly(
TagValueInput.create(ProblemReporter.DISCARDING,
level.registryAccess(), nbt));

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BooleanProperty;

//TODO BUG : REWORK
public interface Connectable {

abstract Map<Direction, BooleanProperty> PropByDir();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,34 @@ default void adjustItemEntity(int remain, ItemEntity item) {
item.setItem(x.item(item.getItem().getItem(), remain));
}

default void collectItem(Level level, BlockPos pos, Entity entity) {

default int collectItem(Level level, BlockPos pos, Entity entity) {
if (!(entity instanceof ItemEntity item))
return;
return 0;
return collectItem(level, pos, item);
}

default int collectItem(Level level, BlockPos pos, ItemEntity entity) {
var remain = collectItem(level, pos, entity.getItem());
adjustItemEntity(remain, entity);
return remain;
}

default void collectItem(Level level, BlockPos pos, ItemStack... item) {
for (ItemStack itemStack : item)
collectItem(level, pos, itemStack);
}

default void collectItem(Level level, BlockPos pos, List<ItemStack> item) {
for (ItemStack itemStack : item)
collectItem(level, pos, itemStack);
}

default int collectItem(Level level, BlockPos pos, ItemStack item) {

var be = level.getBlockEntity(pos);

var skipTransation = false;
var copy = item.getItem().copy();
var copy = item.copy();

var remain = copy.count();

Expand Down Expand Up @@ -65,7 +84,7 @@ default void collectItem(Level level, BlockPos pos, Entity entity) {

}

adjustItemEntity(remain, item);
return remain;

}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.devdyna.cakesticklib.api.aspect.logic;

import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.transfer.item.ItemStacksResourceHandler;

public interface ItemStorageBlock {
Expand All @@ -9,8 +10,10 @@ public interface ItemStorageBlock {

int getSlots();

BlockState getBlockState();

default boolean dropOnBreak() {
return true;
return !(getBlockState().getBlock() instanceof BlockItemKeeper);
}

default ItemStack getStackInSlot(int index) {
Expand All @@ -34,7 +37,7 @@ default boolean isSlotsFull() {
return true;
}

default boolean isSlotsEmpty(int start,int end) {
default boolean isSlotsEmpty(int start, int end) {
for (int i = start; i < end; i++)
if (!getItemStorage().getResource(i).isEmpty())
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,77 @@ default void coil(RecipeOutput c, ItemLike input, ItemLike output) {
has(Items.STICK))
.save(c);

}
default void plate(RecipeOutput c, TagKey<Item> input, ItemLike output,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.MISC, output, count)
.pattern("III")
.define('I', input)
.unlockedBy(getHasName(input),
has(input))
.save(c);

}

default void foil(RecipeOutput c, TagKey<Item> input, ItemLike output,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.MISC, output, count)
.pattern(" IS")
.pattern(" I ")
.pattern("SI ")
.define('I', input)
.define('S', Items.STICK)
.unlockedBy(getHasName(input),
has(Items.STICK))
.save(c);

}

default void coil(RecipeOutput c, TagKey<Item> input, ItemLike output,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.MISC, output, count)
.pattern(" I ")
.pattern("ISI")
.pattern(" I ")
.define('I', input)
.define('S', Items.STICK)
.unlockedBy(getHasName(input),
has(Items.STICK))
.save(c);

}

default void plate(RecipeOutput c, ItemLike input, ItemLike output,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.MISC, output, count)
.pattern("III")
.define('I', input)
.unlockedBy(getHasName(input),
has(input))
.save(c);

}

default void foil(RecipeOutput c, ItemLike input, ItemLike output,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.MISC, output, count)
.pattern(" IS")
.pattern(" I ")
.pattern("SI ")
.define('I', input)
.define('S', Items.STICK)
.unlockedBy(getHasName(input),
has(Items.STICK))
.save(c);

}

default void coil(RecipeOutput c, ItemLike input, ItemLike output,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.MISC, output, count)
.pattern(" I ")
.pattern("ISI")
.pattern(" I ")
.define('I', input)
.define('S', Items.STICK)
.unlockedBy(getHasName(input),
has(Items.STICK))
.save(c);

}

default void packUnpack(RecipeOutput c, ItemLike unpacked, ItemLike packed, boolean isSmall) {
Expand Down Expand Up @@ -311,6 +382,22 @@ default void stair(ItemLike stair, ItemLike material, RecipeOutput c) {
.unlockedBy(getHasName(material), has(material))
.save(c);
}
default void slab(ItemLike slab, ItemLike material,int count, RecipeOutput c) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, slab, count)
.define('#', material)
.pattern("###")
.unlockedBy(getHasName(material), has(material))
.save(c);
}

default void stair(ItemLike stair, ItemLike material,int count, RecipeOutput c) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, stair, count).define('#', material)
.pattern("# ")
.pattern("## ")
.pattern("###")
.unlockedBy(getHasName(material), has(material))
.save(c);
}

default void stonecutter(RecipeOutput c, ItemLike result, ItemLike material, int resultCount) {
stonecutter(c, result, material, resultCount,
Expand Down Expand Up @@ -433,4 +520,64 @@ default void cross(RecipeOutput c, ItemLike result, ItemLike material, TagKey<It
.save(c);
}

default void pillar(RecipeOutput c, ItemLike result, ItemLike material,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, result, count)
.define('#', material)
.pattern("#")
.pattern("#")
.unlockedBy(getHasName(material), has(material))
.save(c);
}

default void pillar(RecipeOutput c, ItemLike result, ItemLike material,int count,
String extra) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, result, count)
.define('#', material)
.pattern("#")
.pattern("#")
.unlockedBy(getHasName(material), has(material))
.save(c, extra);
}

default void tiles(RecipeOutput c, ItemLike result, ItemLike material,int count,
String extra) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, result, count)
.define('#', material)
.pattern("##")
.pattern("##")
.unlockedBy(getHasName(material), has(material))
.save(c, extra);
}

default void tiles(RecipeOutput c, ItemLike result, ItemLike material,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, result, count)
.define('#', material)
.pattern("##")
.pattern("##")
.unlockedBy(getHasName(material), has(material))
.save(c);
}

default void cross(RecipeOutput c, ItemLike result, ItemLike material, ItemLike middle,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, result, count)
.define('#', material)
.define('A', middle)
.pattern(" # ")
.pattern("#A#")
.pattern(" # ")
.unlockedBy(getHasName(material), has(material))
.save(c);
}

default void cross(RecipeOutput c, ItemLike result, ItemLike material, TagKey<Item> middle,int count) {
ShapedRecipeBuilder.shaped(getItems(), RecipeCategory.BUILDING_BLOCKS, result, count)
.define('#', material)
.define('A', middle)
.pattern(" # ")
.pattern("#A#")
.pattern(" # ")
.unlockedBy(getHasName(material), has(material))
.save(c);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
import net.neoforged.neoforge.fluids.FluidStackTemplate;
import net.neoforged.neoforge.fluids.crafting.FluidIngredient;
import net.neoforged.neoforge.fluids.crafting.SizedFluidIngredient;

//TODO BUG : don't work as intended!
@Deprecated
public class RecipeCodecUtils {

public static FluidStackTemplate optionalCodec(FluidStackTemplate f) {
Expand Down
Loading
Loading