Skip to content

Commit

Permalink
TechReborn#2775 Adding trinket support for BatpackItem
Browse files Browse the repository at this point in the history
* Added support for wearing BatpackItems in the 'back' trinket slot on the chest. This frees up an additional space for regular armor.
  • Loading branch information
SimonFlapse committed Mar 25, 2022
1 parent d2c146b commit 129b672
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 7 deletions.
34 changes: 33 additions & 1 deletion RebornCore/src/main/java/reborncore/common/util/ItemUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant;
import net.fabricmc.fabric.api.transfer.v1.item.PlayerInventoryStorage;
import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleSlotStorage;
import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
Expand Down Expand Up @@ -286,12 +287,43 @@ public static void distributePowerToInventory(PlayerEntity player, ItemStack ite
continue;
}

EnergyStorage receiverStorage = ContainerItemContext.ofPlayerSlot(player, playerInv.getSlots().get(i)).find(EnergyStorage.ITEM);

EnergyStorageUtil.move(
sourceStorage,
ContainerItemContext.ofPlayerSlot(player, playerInv.getSlots().get(i)).find(EnergyStorage.ITEM),
receiverStorage,
maxOutput,
null
);
}
}

public static void distributePowerToInventoryFromItem(PlayerEntity player, ItemStack source, long maxOutput) {
PlayerInventoryStorage playerInv = PlayerInventoryStorage.of(player);

EnergyStorage sourceStorage = EnergyStorage.ITEM.find(source, ContainerItemContext.withInitial(source));

for (int i = 0; i < player.getInventory().size(); i++) {
ItemStack invStack = player.getInventory().getStack(i);

if (invStack.isEmpty()) {
continue;
}

EnergyStorage receiverStorage = ContainerItemContext.ofPlayerSlot(player, playerInv.getSlots().get(i)).find(EnergyStorage.ITEM);

if (receiverStorage == null) {
continue;
}

try (Transaction outerTransaction = Transaction.openOuter()) {
long acceptedEnergy = receiverStorage.insert(maxOutput, outerTransaction);
try (Transaction nestedTransaction = outerTransaction.openNested()) {
sourceStorage.extract(acceptedEnergy, nestedTransaction);
nestedTransaction.commit();
}
outerTransaction.commit();
}
}
}
}
21 changes: 17 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ repositories {
content {
// Trinkets dependency
includeGroup "io.github.onyxstudios.Cardinal-Components-API"
includeGroup "dev.onyxstudios.cardinal-components-api"
}
}
// Needed because of an error in the POM file in the Trinkets implementation
// See https://github.com/emilyploszaj/trinkets/issues/159
maven {
name = "TerraformersMC"
url = "https://maven.terraformersmc.com/"
content {
includeGroup("com.terraformersmc")
}
}
maven {
Expand Down Expand Up @@ -184,7 +194,7 @@ dependencies {
include project(":RebornCore")

optionalDependency "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}"
disabledOptionalDependency "com.github.emilyploszaj:trinkets:${project.trinkets_version}"
optionalDependency "com.github.emilyploszaj:trinkets:${project.trinkets_version}"
disabledOptionalDependency "net.oskarstrom:DashLoader:${project.dashloader_version}"

// Use groovy for datagen/gametest, if you are copying this you prob dont want it.
Expand Down Expand Up @@ -304,8 +314,10 @@ task renameCrowdin(type: Copy, dependsOn: ['crowdin', 'cleanCrowdin']){
}
}

import groovy.json.JsonSlurper

import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import groovy.util.XmlSlurper

task fixTranslations(dependsOn: ['renameCrowdin']) {
description "Remove all translations that do not have an entry, ensures that minecraft falls back to EN_US over writing out an empty string"
Expand All @@ -321,7 +333,8 @@ task fixTranslations(dependsOn: ['renameCrowdin']) {
}
}

import groovy.util.XmlSlurper

import org.kohsuke.github.GHReleaseBuilder

curseforge {
if (ENV.CURSEFORGE_API_KEY) {
Expand Down Expand Up @@ -360,7 +373,7 @@ def getBranch() {
return "unknown"
}

import org.kohsuke.github.GHReleaseBuilder

import org.kohsuke.github.GitHub

task github(dependsOn: remapJar) {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ org.gradle.jvmargs=-Xmx2G
# Dependencies
energy_version=2.2.0
rei_version=8.0.438
trinkets_version=3.0.2
trinkets_version=3.3.0
dashloader_version=2.0
15 changes: 14 additions & 1 deletion src/main/java/techreborn/items/armor/BatpackItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@

package techreborn.items.armor;

import dev.emi.trinkets.api.SlotReference;
import dev.emi.trinkets.api.Trinket;
import dev.emi.trinkets.api.TrinketsApi;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.ArmorMaterial;
Expand All @@ -39,7 +43,7 @@
import techreborn.TechReborn;
import techreborn.utils.InitUtils;

public class BatpackItem extends ArmorItem implements RcEnergyItem {
public class BatpackItem extends ArmorItem implements RcEnergyItem, Trinket {

public final int maxCharge;
public final RcEnergyTier tier;
Expand All @@ -48,6 +52,15 @@ public BatpackItem(int maxCharge, ArmorMaterial material, RcEnergyTier tier) {
super(material, EquipmentSlot.CHEST, new Settings().group(TechReborn.ITEMGROUP).maxCount(1).maxDamage(-1));
this.maxCharge = maxCharge;
this.tier = tier;
TrinketsApi.registerTrinket(this, this);
}

//Trinket
@Override
public void tick(ItemStack stack, SlotReference slot, LivingEntity entity) {
if (entity instanceof PlayerEntity) {
ItemUtils.distributePowerToInventoryFromItem((PlayerEntity) entity, stack, tier.getMaxOutput());
}
}

// Item
Expand Down
8 changes: 8 additions & 0 deletions src/main/resources/data/trinkets/entities/techreborn.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"entities": [
"player"
],
"slots": [
"chest/back"
]
}
7 changes: 7 additions & 0 deletions src/main/resources/data/trinkets/tags/items/chest/back.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"techreborn:lithium_ion_batpack",
"techreborn:lapotronic_orbpack"
]
}

0 comments on commit 129b672

Please sign in to comment.