Skip to content

Commit

Permalink
feat: fix Injector not reloading with max serum amount
Browse files Browse the repository at this point in the history
  • Loading branch information
Elenterius committed Aug 2, 2023
1 parent e31657a commit 315c9af
Showing 1 changed file with 29 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import net.minecraft.world.entity.EntitySelector;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
Expand All @@ -55,6 +56,7 @@
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.network.PacketDistributor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -173,16 +175,29 @@ private void setInventory(ItemStack injector, Player player, int slotIndex) {

getItemHandler(injector).ifPresent(handler -> {
ItemStack oldStack = ItemStack.EMPTY;
if (!handler.getStack().isEmpty()) {
if (!handler.getStack().isEmpty() && !ItemHandlerHelper.canItemStacksStack(foundStack, handler.getStack())) {
oldStack = handler.extractItem(handler.getMaxAmount(), false);
}

ItemStack remainder = handler.insertItem(foundStack, false);
player.getInventory().setItem(slotIndex, remainder);

if (remainder.isEmpty() && !handler.isFull()) {
Inventory inventory = player.getInventory();
int slots = inventory.getContainerSize();
for (int idx = 0; idx < slots; idx++) {
ItemStack stack = inventory.getItem(idx);
if (ItemHandlerHelper.canItemStacksStack(stack, handler.getStack())) {
remainder = handler.insertItem(foundStack, false);
player.getInventory().setItem(idx, remainder);
if (!remainder.isEmpty()) break;
}
}
}

//eject old stuff
if (!oldStack.isEmpty() && !player.addItem(oldStack)) {
player.drop(oldStack, false);
if (!oldStack.isEmpty()) {
player.getInventory().placeItemBackInInventory(oldStack);
}
});
}
Expand All @@ -191,9 +206,7 @@ private void clearInventory(ItemStack injector, Player player) {
getItemHandler(injector).ifPresent(handler -> {
if (!handler.getStack().isEmpty()) {
ItemStack result = handler.extractItem(handler.getMaxAmount(), false);
if (!player.addItem(result)) {
player.drop(result, false);
}
player.getInventory().placeItemBackInInventory(result);
}
});
}
Expand Down Expand Up @@ -271,6 +284,16 @@ private void consumeSerum(LargeSingleItemStackHandler handler, @Nullable Player
}
}

@Override
public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) {
return enchantment == Enchantments.PIERCING || super.canApplyAtEnchantingTable(stack, enchantment);
}

@Override
public int getEnchantmentValue() {
return 15;
}

@Nullable
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) {
Expand Down Expand Up @@ -456,16 +479,6 @@ public Component getHighlightTip(ItemStack stack, Component displayName) {
return serum.isEmpty() ? displayName : ComponentUtil.mutable().append(displayName).append(" (").append(serum.getDisplayName()).append(")");
}

@Override
public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) {
return enchantment == Enchantments.PIERCING || super.canApplyAtEnchantingTable(stack, enchantment);
}

@Override
public int getEnchantmentValue() {
return 15;
}

enum InjectorAnimationState {
EMPTY(-1, ""),
INJECT_OTHER(0, "injector.inject"),
Expand Down

0 comments on commit 315c9af

Please sign in to comment.