SimpleMultipart/src/main/java/net/shadowfacts/simplemultipart/item/ItemMultipart.java

94 lines
2.9 KiB
Java
Raw Normal View History

2018-12-20 00:39:10 +00:00
package net.shadowfacts.simplemultipart.item;
import net.minecraft.block.BlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemPlacementContext;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.util.ActionResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.shadowfacts.simplemultipart.SimpleMultipart;
import net.shadowfacts.simplemultipart.container.MultipartContainerBlockEntity;
import net.shadowfacts.simplemultipart.multipart.Multipart;
import net.shadowfacts.simplemultipart.multipart.MultipartState;
2018-12-24 22:16:38 +00:00
import net.shadowfacts.simplemultipart.util.MultipartPlacementContext;
2018-12-20 00:39:10 +00:00
/**
* @author shadowfacts
*/
public class ItemMultipart extends Item {
protected Multipart part;
public ItemMultipart(Multipart part) {
super(new Settings());
this.part = part;
}
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
return place(new ItemPlacementContext(context));
}
protected ActionResult place(ItemPlacementContext context) {
MultipartContainerBlockEntity container = getOrCreateContainer(context.getWorld(), context.getPos());
if (container == null) {
return ActionResult.FAILURE;
}
2018-12-24 22:16:38 +00:00
MultipartPlacementContext partContext = new MultipartPlacementContext(container, context);
MultipartState state = part.getPlacementState(partContext);
2018-12-20 00:39:10 +00:00
2018-12-24 22:16:38 +00:00
if (!container.canInsert(state)) {
// container.destroyIfEmpty();
2018-12-20 00:39:10 +00:00
return ActionResult.FAILURE;
}
2018-12-24 22:16:38 +00:00
container.insert(state);
2018-12-20 00:39:10 +00:00
context.getItemStack().addAmount(-1);
return ActionResult.SUCCESS;
2018-12-24 22:16:38 +00:00
// MultipartSlot slot = getSlotForPlacement(container, context);
// if (slot == null) {
// return ActionResult.FAILURE;
// }
//
// MultipartState partState = part.getPlacementState(slot, container);
// if (!container.canInsert(partState, slot)) {
// return ActionResult.FAILURE;
// }
//
// container.insert(partState, slot);
//
// context.getItemStack().addAmount(-1);
//
// return ActionResult.SUCCESS;
2018-12-20 00:39:10 +00:00
}
protected MultipartContainerBlockEntity getOrCreateContainer(World world, BlockPos pos) {
BlockState current = world.getBlockState(pos);
if (current.getBlock() == SimpleMultipart.containerBlock) {
return (MultipartContainerBlockEntity)world.getBlockEntity(pos);
} else if (current.isAir()) {
world.setBlockState(pos, SimpleMultipart.containerBlock.getDefaultState());
return (MultipartContainerBlockEntity)world.getBlockEntity(pos);
} else {
return null;
}
}
2018-12-24 22:16:38 +00:00
// protected MultipartSlot getSlotForPlacement(MultipartContainerBlockEntity container, ItemPlacementContext context) {
// MultipartSlot slot = MultipartSlot.fromClickedSide(context.getFacing());
// if (part.isValidSlot(slot) && !container.hasPartInSlot(slot)) {
// return slot;
// }
// if (part.isValidSlot(MultipartSlot.CENTER) && !container.hasPartInSlot(MultipartSlot.CENTER)) {
// return MultipartSlot.CENTER;
// }
// return null;
// }
2018-12-20 00:39:10 +00:00
}