Skip to content

Commit

Permalink
Merge pull request #281 from P3pp3rF1y/1.18.x-dev
Browse files Browse the repository at this point in the history
Release merge
  • Loading branch information
P3pp3rF1y authored Sep 4, 2023
2 parents b69e1c4 + 9e3c8c4 commit eb856e7
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 11 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ org.gradle.internal.publish.checksums.insecure=true
org.gradle.daemon=false
minecraft_version=1.18.2
forge_version=40.1.30
mod_version=0.8.39
mod_version=0.8.42
jei_mc_version=1.18.2
jei_version=9.7.0+
balm_cf_file_id=3914491
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ReloadableResourceManager;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.server.packs.resources.ResourceManagerReloadListener;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.InventoryMenu;
import net.minecraft.world.inventory.Slot;
Expand All @@ -25,6 +26,7 @@
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.event.RegisterClientReloadListenersEvent;
import net.minecraftforge.client.event.ScreenEvent;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.gui.OverlayRegistry;
Expand All @@ -33,7 +35,6 @@
import net.minecraftforge.client.settings.IKeyConflictContext;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.AddPackFindersEvent;
import net.minecraftforge.event.AddReloadListenerEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.IEventBus;
Expand Down Expand Up @@ -112,18 +113,13 @@ public static void registerHandlers() {
modBus.addListener(ClientEventHandler::registerEntityRenderers);
modBus.addListener(ModParticles::registerFactories);
modBus.addListener(ClientEventHandler::registerStorageLayerLoader);
modBus.addListener(ClientEventHandler::onRegisterReloadListeners);
IEventBus eventBus = MinecraftForge.EVENT_BUS;
eventBus.addListener(ClientStorageContentsTooltip::onWorldLoad);
eventBus.addListener(EventPriority.HIGH, ClientEventHandler::handleGuiMouseKeyPress);
eventBus.addListener(EventPriority.HIGH, ClientEventHandler::handleGuiKeyPress);
eventBus.addListener(ClientEventHandler::onLimitedBarrelClicked);
eventBus.addListener(ClientEventHandler::onMouseScrolled);
eventBus.addListener(ClientEventHandler::onResourceReload);
}

private static void onResourceReload(AddReloadListenerEvent event) {
BarrelDynamicModelBase.invalidateCache();
BarrelBakedModelBase.invalidateCache();
}

private static void onMouseScrolled(InputEvent.MouseScrollEvent evt) {
Expand Down Expand Up @@ -214,6 +210,13 @@ private static void addBarrelPartModelsToBake() {
});
}

private static void onRegisterReloadListeners(RegisterClientReloadListenersEvent event) {
event.registerReloadListener((ResourceManagerReloadListener) resourceManager -> {
BarrelDynamicModelBase.invalidateCache();
BarrelBakedModelBase.invalidateCache();
});
}

public static void registerLayer(EntityRenderersEvent.RegisterLayerDefinitions event) {
event.registerLayerDefinition(CHEST_LAYER, () -> ChestRenderer.createSingleBodyLayer(true));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import net.p3pp3rf1y.sophisticatedcore.inventory.InventoryHandler;
import net.p3pp3rf1y.sophisticatedcore.inventory.InventoryPartRegistry;
import net.p3pp3rf1y.sophisticatedcore.inventory.InventoryPartitioner;
import net.p3pp3rf1y.sophisticatedcore.settings.itemdisplay.ItemDisplaySettingsCategory;
import net.p3pp3rf1y.sophisticatedcore.settings.memory.MemorySettingsCategory;
import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase;
import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType;
Expand Down Expand Up @@ -105,6 +106,7 @@ public void onAdded() {
setFirstInventorySlot(slotRange.firstSlot());
inventoryPartitioner.addInventoryPart(slotRange.firstSlot(), slotRange.numberOfSlots(), new CompressionInventoryPart(storageWrapper.getInventoryHandler(), slotRange, () -> storageWrapper.getSettingsHandler().getTypeCategory(MemorySettingsCategory.class)));
});
storageWrapper.getSettingsHandler().getTypeCategory(ItemDisplaySettingsCategory.class).itemsChanged();
}

private void setFirstInventorySlot(int firstInventorySlot) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,18 @@
import net.minecraft.core.Direction;
import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag;
import net.minecraft.world.WorldlyContainer;
import net.minecraft.world.WorldlyContainerHolder;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import net.p3pp3rf1y.sophisticatedcore.api.IStorageWrapper;
import net.p3pp3rf1y.sophisticatedcore.inventory.ITrackedContentsItemHandler;
import net.p3pp3rf1y.sophisticatedcore.settings.memory.MemorySettingsCategory;
import net.p3pp3rf1y.sophisticatedcore.upgrades.ContentsFilterLogic;
import net.p3pp3rf1y.sophisticatedcore.upgrades.FilterLogic;
Expand Down Expand Up @@ -64,19 +68,81 @@ public void tick(@Nullable LivingEntity entity, Level level, BlockPos pos) {
}

for (Direction pushDirection : pushDirections) {
if (getItemHandler(level, pos, pushDirection).map(this::pushItems).orElse(false)) {
if (getItemHandler(level, pos, pushDirection).map(this::pushItems)
.orElse(getWorldlyContainer(level, pos, pushDirection).map(container -> pushItemsToContainer(container, pushDirection.getOpposite()))
.orElse(false))) {
break;
}
}

for (Direction pullDirection : pullDirections) {
if (getItemHandler(level, pos, pullDirection).map(this::pullItem).orElse(false)) {
if (getItemHandler(level, pos, pullDirection).map(this::pullItems)
.orElse(getWorldlyContainer(level, pos, pullDirection).map(container -> pullItemsFromContainer(container, pullDirection.getOpposite()))
.orElse(false))) {
break;
}
}

coolDownTime = level.getGameTime() + upgradeItem.getTransferSpeedTicks();
}

private boolean pushItemsToContainer(WorldlyContainer worldlyContainer, Direction face) {
ITrackedContentsItemHandler fromHandler = storageWrapper.getInventoryForUpgradeProcessing();

for (int slot = 0; slot < fromHandler.getSlots(); slot++) {
ItemStack slotStack = fromHandler.getStackInSlot(slot);
if (!slotStack.isEmpty() && outputFilterLogic.matchesFilter(slotStack)) {
ItemStack extractedStack = fromHandler.extractItem(slot, Math.min(worldlyContainer.getMaxStackSize(), upgradeItem.getMaxTransferStackSize()), true);
if (!extractedStack.isEmpty() && pushStackToContainer(worldlyContainer, face, extractedStack, fromHandler, slot)) {
return true;
}
}
}

return false;
}

private boolean pushStackToContainer(WorldlyContainer worldlyContainer, Direction face, ItemStack extractedStack, ITrackedContentsItemHandler fromHandler, int slotToExtractFrom) {
for (int containerSlot = 0; containerSlot < worldlyContainer.getContainerSize(); containerSlot++) {
if (worldlyContainer.canPlaceItemThroughFace(containerSlot, extractedStack, face)) {
ItemStack existingStack = worldlyContainer.getItem(containerSlot);
if (existingStack.isEmpty()) {
worldlyContainer.setItem(containerSlot, extractedStack);
fromHandler.extractItem(slotToExtractFrom, extractedStack.getCount(), false);
return true;
} else if (ItemHandlerHelper.canItemStacksStack(existingStack, extractedStack)) {
int maxStackSize = Math.min(worldlyContainer.getMaxStackSize(), existingStack.getMaxStackSize());
int remainder = maxStackSize - existingStack.getCount();
if (remainder > 0) {
int countToExtract = Math.min(extractedStack.getCount(), remainder);
existingStack.grow(countToExtract);
worldlyContainer.setItem(containerSlot, existingStack);
fromHandler.extractItem(slotToExtractFrom, countToExtract, false);
return true;
}
}
}
}
return false;
}

private boolean pullItemsFromContainer(WorldlyContainer worldlyContainer, Direction face) {
ITrackedContentsItemHandler toHandler = storageWrapper.getInventoryForUpgradeProcessing();
for (int containerSlot = 0; containerSlot < worldlyContainer.getContainerSize(); containerSlot++) {
ItemStack existingStack = worldlyContainer.getItem(containerSlot);
if (!existingStack.isEmpty() && worldlyContainer.canTakeItemThroughFace(containerSlot, existingStack, face) && inputFilterLogic.matchesFilter(existingStack)) {
ItemStack remainingStack = InventoryHelper.insertIntoInventory(existingStack, toHandler, false);

if (remainingStack.getCount() < existingStack.getCount()) {
worldlyContainer.setItem(containerSlot, remainingStack);
return true;
}
}
}

return false;
}

private void initDirections(Level level, BlockPos pos) {
if (upgrade.hasTag()) {
return;
Expand All @@ -89,7 +155,16 @@ private void initDirections(Level level, BlockPos pos) {
}
}

private boolean pullItem(IItemHandler fromHandler) {
private Optional<WorldlyContainer> getWorldlyContainer(Level level, BlockPos pos, Direction direction) {
BlockPos offsetPos = pos.relative(direction);
BlockState state = level.getBlockState(offsetPos);
if (state.getBlock() instanceof WorldlyContainerHolder worldlyContainerHolder) {
return Optional.of(worldlyContainerHolder.getContainer(state, level, offsetPos));
}
return Optional.empty();
}

private boolean pullItems(IItemHandler fromHandler) {
return moveItems(fromHandler, storageWrapper.getInventoryForUpgradeProcessing(), inputFilterLogic);
}

Expand Down

0 comments on commit eb856e7

Please sign in to comment.