Compare commits

..

4 commits

Author SHA1 Message Date
Ell
894fae6b87 1.18.1
Improvements
- Disable drop shadow for pipe frames to make them more readable (fr3qu3ncy-dev)
- Added a button to the crafting terminal to send crafting items back to storage
2024-11-22 13:44:13 +01:00
Ell
09a471c042 added a button to send craft items back
closes #215
2024-11-22 13:41:13 +01:00
Ell
e0e0b550e2 Merge remote-tracking branch 'origin/main' 2024-11-22 13:23:43 +01:00
Ell
db97e2dd25 added publish task 2024-11-22 13:23:29 +01:00
7 changed files with 99 additions and 9 deletions

View file

@ -3,12 +3,12 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Clone repository - name: Clone Repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v4 uses: actions/setup-java@v4
with: with:
java-version: '17' java-version: '21'
distribution: 'temurin' distribution: 'temurin'
- name: Cache - name: Cache
uses: actions/cache@v4 uses: actions/cache@v4
@ -16,7 +16,7 @@ jobs:
path: | path: |
~/.gradle/caches ~/.gradle/caches
~/.gradle/wrapper ~/.gradle/wrapper
key: ${{ hashFiles('**/build.gradle', '**/gradle-wrapper.properties') }} key: ${{ hashFiles('**/build.gradle', '**/gradle-wrapper.properties', '**/gradle.properties') }}
- name: Build - name: Build
run: | run: |
chmod +x ./gradlew chmod +x ./gradlew
@ -25,4 +25,4 @@ jobs:
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: Mod Jar name: Mod Jar
path: build/libs/**.jar path: build/libs/**.jar

39
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,39 @@
on:
push:
tags: ["*"]
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Clone Repository
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ hashFiles('**/build.gradle', '**/gradle-wrapper.properties', '**/gradle.properties') }}
- name: Grab Changelog from Commit Message Body
run: |
changelog=$(echo -e "$MESSAGE" | sed -n '/^$/,$p' | sed '1d')
echo -e "$changelog"
{
echo 'CHANGELOG<<EOF'
echo -e "$changelog"
echo EOF
} >> "$GITHUB_ENV"
env:
MESSAGE: ${{ github.event.head_commit.message }}
- name: Release
run: |
chmod +x ./gradlew
./gradlew publishMods --no-daemon
env:
MR_TOKEN: ${{ secrets.MR_TOKEN }}
CF_TOKEN: ${{ secrets.CF_TOKEN }}

View file

@ -4,6 +4,7 @@ plugins {
id 'idea' id 'idea'
id 'maven-publish' id 'maven-publish'
id 'net.neoforged.gradle.userdev' version '7.0.163' id 'net.neoforged.gradle.userdev' version '7.0.163'
id 'me.modmuss50.mod-publish-plugin' version "0.7.4"
} }
tasks.named('wrapper', Wrapper).configure { tasks.named('wrapper', Wrapper).configure {
@ -171,3 +172,28 @@ idea {
downloadJavadoc = true downloadJavadoc = true
} }
} }
publishMods {
def cfToken = providers.environmentVariable("CF_TOKEN")
def mrToken = providers.environmentVariable("MR_TOKEN")
dryRun = !cfToken.isPresent() || !mrToken.isPresent()
changelog = providers.environmentVariable("CHANGELOG").orElse("")
version = mod_version
type = me.modmuss50.mpp.ReleaseType.valueOf(mod_release_state)
file = tasks.jarJar.archiveFile
modLoaders.add("neoforge")
modrinth {
accessToken = mrToken
projectId = "XExdLWCQ"
minecraftVersions.add(minecraft_version)
optional("jei")
}
curseforge {
accessToken = cfToken
projectId = "376737"
minecraftVersions.add(minecraft_version)
optional("jei")
}
}

View file

@ -34,7 +34,8 @@ mod_name=PrettyPipes
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=MIT mod_license=MIT
# The mod version. See https://semver.org/ # The mod version. See https://semver.org/
mod_version=1.18.0 mod_version=1.18.1
mod_release_state=STABLE
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources. # This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html # See https://maven.apache.org/guides/mini/guide-naming-conventions.html

View file

@ -121,6 +121,10 @@ public record PacketButton(BlockPos pos, int result, List<Integer> data) impleme
var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, player.level(), pos); var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, player.level(), pos);
tile.requestCraftingItems(player, data.getFirst(), data.get(1) > 0); tile.requestCraftingItems(player, data.getFirst(), data.get(1) > 0);
}), }),
CRAFT_TERMINAL_SEND_BACK((pos, data, player) -> {
var tile = Utility.getBlockEntity(CraftingTerminalBlockEntity.class, player.level(), pos);
tile.sendItemsBack();
}),
CANCEL_CRAFTING((pos, data, player) -> { CANCEL_CRAFTING((pos, data, player) -> {
var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level(), pos); var tile = Utility.getBlockEntity(ItemTerminalBlockEntity.class, player.level(), pos);
tile.cancelCrafting(); tile.cancelCrafting();

View file

@ -26,6 +26,7 @@ import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.items.ItemHandlerHelper; import net.neoforged.neoforge.items.ItemHandlerHelper;
import net.neoforged.neoforge.items.ItemStackHandler; import net.neoforged.neoforge.items.ItemStackHandler;
import net.neoforged.neoforge.items.wrapper.RangedWrapper;
import net.neoforged.neoforge.network.PacketDistributor; import net.neoforged.neoforge.network.PacketDistributor;
import org.apache.commons.lang3.mutable.MutableInt; import org.apache.commons.lang3.mutable.MutableInt;
@ -139,6 +140,17 @@ public class CraftingTerminalBlockEntity extends ItemTerminalBlockEntity {
network.endProfile(); network.endProfile();
} }
public void sendItemsBack() {
var outputInventory = new RangedWrapper(this.items, 6, 12);
for (var i = 0; i < this.craftItems.getSlots(); i++) {
var stack = this.craftItems.getStackInSlot(i);
if (!stack.isEmpty()) {
var remain = ItemHandlerHelper.insertItemStacked(outputInventory, stack, false);
this.craftItems.setStackInSlot(i, remain);
}
}
}
@Override @Override
public void saveAdditional(CompoundTag compound, HolderLookup.Provider provider) { public void saveAdditional(CompoundTag compound, HolderLookup.Provider provider) {
super.saveAdditional(compound, provider); super.saveAdditional(compound, provider);

View file

@ -5,6 +5,7 @@ import de.ellpeck.prettypipes.PrettyPipes;
import de.ellpeck.prettypipes.packets.PacketButton; import de.ellpeck.prettypipes.packets.PacketButton;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.Tooltip;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -12,11 +13,13 @@ import net.minecraft.world.entity.player.Inventory;
import net.neoforged.neoforge.network.PacketDistributor; import net.neoforged.neoforge.network.PacketDistributor;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
public class CraftingTerminalGui extends ItemTerminalGui { public class CraftingTerminalGui extends ItemTerminalGui {
private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(PrettyPipes.ID, "textures/gui/crafting_terminal.png"); private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(PrettyPipes.ID, "textures/gui/crafting_terminal.png");
private Button requestButton; private Button requestButton;
private Button sendBackButton;
public CraftingTerminalGui(ItemTerminalContainer screenContainer, Inventory inv, Component titleIn) { public CraftingTerminalGui(ItemTerminalContainer screenContainer, Inventory inv, Component titleIn) {
super(screenContainer, inv, titleIn); super(screenContainer, inv, titleIn);
@ -32,6 +35,9 @@ public class CraftingTerminalGui extends ItemTerminalGui {
var force = Screen.hasAltDown() || InputConstants.isKeyDown(this.minecraft.getWindow().getWindow(), 259) ? 1 : 0; var force = Screen.hasAltDown() || InputConstants.isKeyDown(this.minecraft.getWindow().getWindow(), 259) ? 1 : 0;
PacketDistributor.sendToServer(new PacketButton(this.menu.tile.getBlockPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, Arrays.asList(amount, force))); PacketDistributor.sendToServer(new PacketButton(this.menu.tile.getBlockPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, Arrays.asList(amount, force)));
}).bounds(this.leftPos + 8, this.topPos + 100, 50, 20).build()); }).bounds(this.leftPos + 8, this.topPos + 100, 50, 20).build());
this.sendBackButton = this.addRenderableWidget(Button.builder(Component.literal(">"), button -> {
PacketDistributor.sendToServer(new PacketButton(this.menu.tile.getBlockPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_SEND_BACK, List.of()));
}).bounds(this.leftPos + 47, this.topPos + 72, 12, 12).build());
this.tick(); this.tick();
} }
@ -40,12 +46,14 @@ public class CraftingTerminalGui extends ItemTerminalGui {
super.containerTick(); super.containerTick();
var tile = this.getCraftingContainer().getTile(); var tile = this.getCraftingContainer().getTile();
this.requestButton.active = false; this.requestButton.active = false;
this.sendBackButton.active = false;
for (var i = 0; i < tile.craftItems.getSlots(); i++) { for (var i = 0; i < tile.craftItems.getSlots(); i++) {
var stack = tile.getRequestedCraftItem(i); var requestStack = tile.getRequestedCraftItem(i);
if (!stack.isEmpty() && stack.getCount() < stack.getMaxStackSize()) { if (!requestStack.isEmpty() && requestStack.getCount() < requestStack.getMaxStackSize())
this.requestButton.active = true; this.requestButton.active = true;
break; var realStack = tile.craftItems.getStackInSlot(i);
} if (!realStack.isEmpty())
this.sendBackButton.active = true;
} }
} }