Skip to content

Commit

Permalink
initial pipe work
Browse files Browse the repository at this point in the history
  • Loading branch information
PssbleTrngle committed Nov 13, 2024
1 parent f5f5c26 commit 1192ceb
Show file tree
Hide file tree
Showing 19 changed files with 352 additions and 159 deletions.
2 changes: 2 additions & 0 deletions common/src/generated/resources/assets/nirvana/lang/en_ud.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"item.nirvana.joint": "ʇuıoſ",
"item.nirvana.music_disc_jam": "ɔsıᗡ ɔısnW",
"item.nirvana.music_disc_jam.desc": "ɥɔɹıɟ - ɯɐſ",
"item.nirvana.old_pipe": "ǝdıԀ pןO",
"item.nirvana.potion_bong": "buoᗺ uoıʇoԀ",
"item.nirvana.potion_bong.effect.awkward": "buoᗺ pɹɐʍʞʍⱯ",
"item.nirvana.potion_bong.effect.empty": "buoᗺ ʎʇdɯƎ",
Expand All @@ -35,6 +36,7 @@
"item.nirvana.potion_bong.effect.water": "buoᗺ ɹǝʇɐM",
"item.nirvana.potion_bong.effect.water_breathing": "buıɥʇɐǝɹᗺ ɹǝʇɐM ɟo buoᗺ",
"item.nirvana.potion_bong.effect.weakness": "ssǝuʞɐǝM ɟo buoᗺ",
"item.nirvana.suspicious_pipe": "ǝdıԀ snoıɔıdsnS",
"item.nirvana.weed": "pnᗺ pǝǝM",
"item.nirvana.weed_brownie": "ǝıuʍoɹᗺ pǝǝM",
"painting.nirvana.this_is_not_a_horn.author": "oʇʇǝdɐʎ",
Expand Down
2 changes: 2 additions & 0 deletions common/src/generated/resources/assets/nirvana/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"item.nirvana.joint": "Joint",
"item.nirvana.music_disc_jam": "Music Disc",
"item.nirvana.music_disc_jam.desc": "Jam - firch",
"item.nirvana.old_pipe": "Old Pipe",
"item.nirvana.potion_bong": "Potion Bong",
"item.nirvana.potion_bong.effect.awkward": "Awkward Bong",
"item.nirvana.potion_bong.effect.empty": "Empty Bong",
Expand All @@ -35,6 +36,7 @@
"item.nirvana.potion_bong.effect.water": "Water Bong",
"item.nirvana.potion_bong.effect.water_breathing": "Bong of Water Breathing",
"item.nirvana.potion_bong.effect.weakness": "Bong of Weakness",
"item.nirvana.suspicious_pipe": "Suspicious Pipe",
"item.nirvana.weed": "Weed Bud",
"item.nirvana.weed_brownie": "Weed Brownie",
"painting.nirvana.this_is_not_a_horn.author": "Yapetto",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "nirvana:item/old_pipe"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "nirvana:item/suspicious_pipe"
}
}
18 changes: 18 additions & 0 deletions common/src/main/java/galena/nirvana/compat/NirvanaJeiCompat.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package galena.nirvana.compat;

import galena.nirvana.NirvanaConstants;
import galena.nirvana.world.item.SuspiciousItem;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.alchemy.PotionUtils;

import java.util.StringJoiner;

public class NirvanaJeiCompat {

public static final ResourceLocation ID = new ResourceLocation(NirvanaConstants.MOD_ID, "jei");
Expand All @@ -16,4 +20,18 @@ public static String interpretPotion(ItemStack ingredient, Object unused) {
effects.forEach(it -> builder.append(";").append(it));
return builder.toString();
}

public static String interpretSuspiciousItem(ItemStack ingredient, Object unused) {
var effects = SuspiciousItem.getEffects(ingredient, 1000);

if(effects.isEmpty()) return "";

var joiner = new StringJoiner(",", "[", "]");
effects.stream()
.map(it -> MobEffect.getId(it.getEffect()) + "." + it.getDuration())
.forEach(joiner::add);

return joiner.toString();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,8 @@ public int browniesPeaceSeconds() {
public int herbalSalveDuration() {
return 160 * 3;
}

public int suspiciousPipeDuration() {
return 160 * 3;
}
}
25 changes: 22 additions & 3 deletions common/src/main/java/galena/nirvana/index/NirvanaItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import galena.nirvana.world.item.LazyFoodItem;
import galena.nirvana.world.item.ModdedRecordItem;
import galena.nirvana.world.item.PotionBongItem;
import galena.nirvana.world.item.SuspiciousPipeItem;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.data.recipes.ShapelessRecipeBuilder;
Expand Down Expand Up @@ -95,8 +96,8 @@ private static <T extends Item> Consumer<CreativeModeTabModifier> addPotionStack
.forEach(modifier::accept);
}

private static <T extends Item> Consumer<CreativeModeTabModifier> addSalveStacks() {
return modifier -> NirvanaRecipeTypes.getSalves()
private static <T extends Item> Consumer<CreativeModeTabModifier> addSuspiciousStack(ItemBuilder<T, ?> item) {
return modifier -> NirvanaRecipeTypes.getSuspiciousVariants(item.getEntry())
.map(Pair::getSecond)
.forEach(modifier::accept);
}
Expand All @@ -107,12 +108,15 @@ private static <T extends Item> Consumer<CreativeModeTabModifier> addSalveStacks
.color(() -> () -> NirvanaClient.POTION_COLOR)
.properties(it -> it.durability(Services.CONFIG.common().getBongHits()))
.properties(it -> it.craftRemainder(Items.GLASS_BOTTLE))
.tag(NirvanaTags.SMOKING_ITEM)
.model((c, p) -> p.generated(c, p.modLoc("item/bong_potion"), p.modLoc("item/bong_potion_overlay")))
.register();

public static final ItemEntry<JointItem> JOINT = REGISTRATE
.item("joint", Services.PLATFORM::createJointItem)
.properties(it -> it.durability(Services.CONFIG.common().getJointHits()))
.tag(NirvanaTags.NAUSEATING)
.tag(NirvanaTags.SMOKING_ITEM)
.tag(NirvanaTags.ATTACHED_TO_HEAD)
.tab(CreativeModeTabs.FOOD_AND_DRINKS)
.model(Services.DATAGEN::joint)
Expand All @@ -129,7 +133,7 @@ private static <T extends Item> Consumer<CreativeModeTabModifier> addSalveStacks
.item("herbal_salve", HerbalSalveItem::new)
.properties(it -> it.stacksTo(1))
.properties(it -> it.craftRemainder(Items.BOWL))
.tab(CreativeModeTabs.FOOD_AND_DRINKS, NirvanaItems.addSalveStacks())
.transform(it -> it.tab(CreativeModeTabs.FOOD_AND_DRINKS, NirvanaItems.addSuspiciousStack(it)))
.register();

public static final ItemEntry<? extends RecordItem> DISC_JAM = REGISTRATE
Expand All @@ -144,6 +148,21 @@ private static <T extends Item> Consumer<CreativeModeTabModifier> addSalveStacks
})
.register();

public static final ItemEntry<? extends Item> EMPTY_PIPE = REGISTRATE
.item("old_pipe", Item::new)
.properties(it -> it.stacksTo(1))
.properties(it -> it.rarity(Rarity.RARE))
.tab(CreativeModeTabs.TOOLS_AND_UTILITIES)
.register();

public static final ItemEntry<? extends Item> FILLED_PIPE = REGISTRATE
.item("suspicious_pipe", SuspiciousPipeItem::new)
.properties(it -> it.stacksTo(1))
.properties(it -> it.rarity(Rarity.RARE))
.tag(NirvanaTags.SMOKING_ITEM)
.transform(it -> it.tab(CreativeModeTabs.TOOLS_AND_UTILITIES, NirvanaItems.addSuspiciousStack(it)))
.register();

public static void register() {
// loads this class
}
Expand Down
63 changes: 32 additions & 31 deletions common/src/main/java/galena/nirvana/index/NirvanaRecipeTypes.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
import com.mojang.datafixers.util.Pair;
import com.tterrag.registrate.AbstractRegistrate;
import com.tterrag.registrate.util.entry.RegistryEntry;
import galena.nirvana.NirvanaConstants;
import galena.nirvana.platform.Services;
import galena.nirvana.world.recipe.HerbalSalveRecipe;
import galena.nirvana.world.recipe.SuspicousCraftingRecipe;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.core.NonNullList;
Expand All @@ -21,32 +20,24 @@
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.CraftingRecipe;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.ShapelessRecipe;
import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.FlowerBlock;

import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;

public class NirvanaRecipeTypes {

public static class SimpleRecipeType<T extends Recipe<?>> implements RecipeType<T> {
}

private static final AbstractRegistrate<?> REGISTRATE = Services.PLATFORM.getRegistrate();

//public static final RegistryEntry<RecipeType<?>> HERBAL_SALVE_RECIPE_TYPE = REGISTRATE
// .generic("herbal_salve_crafting", Registries.RECIPE_TYPE, SimpleRecipeType::new)
// .register();

public static final RegistryEntry<SimpleCraftingRecipeSerializer<HerbalSalveRecipe>> HERBAL_SALVE_RECIPE_SERIALIZER = REGISTRATE
.generic("herbal_salve_crafting", Registries.RECIPE_SERIALIZER, () -> new SimpleCraftingRecipeSerializer<>(HerbalSalveRecipe::new))
public static final RegistryEntry<? extends RecipeSerializer<?>> SUSPICIOUS_RECIPE_SERIALIZER = REGISTRATE
.generic("suspicious_crafting", Registries.RECIPE_SERIALIZER, SuspicousCraftingRecipe.Serializer::new)
.register();

public static Stream<Pair<ItemLike, ItemStack>> getSalves() {
public static Stream<Pair<ItemLike, ItemStack>> getSuspiciousVariants(ItemLike output) {
return BuiltInRegistries.ITEM.getTag(ItemTags.SMALL_FLOWERS)
.stream()
.flatMap(HolderSet.ListBacked::stream)
Expand All @@ -56,29 +47,39 @@ public static Stream<Pair<ItemLike, ItemStack>> getSalves() {
.filter(FlowerBlock.class::isInstance)
.map(FlowerBlock.class::cast)
.map(flower -> {
ItemStack output = NirvanaItems.HERBAL_SALVE.asStack();
var outputStack = new ItemStack(output);
MobEffect mobeffect = flower.getSuspiciousEffect();
SuspiciousStewItem.saveMobEffect(output, mobeffect, flower.getEffectDuration());
SuspiciousStewItem.saveMobEffect(outputStack, mobeffect, flower.getEffectDuration());

return new Pair<>(flower, output);
return new Pair<>(flower, outputStack);
});
}

public static List<CraftingRecipe> createSalveRecipes() {
String group = "jei.herbal_salves";
Ingredient bowl = Ingredient.of(Items.BOWL);
Ingredient weed = Ingredient.of(NirvanaItems.WEED);
private static Stream<CraftingRecipe> createSuspiciousRecipes(Ingredient base, ItemLike result, int flowerCount, int weedCount) {
var group = BuiltInRegistries.ITEM.getKey(result.asItem());
var weed = Ingredient.of(NirvanaItems.WEED);

return getSalves().<CraftingRecipe>map(pair -> {
var flowerBlock = pair.getFirst().asItem();
var output = pair.getSecond();
return getSuspiciousVariants(result).<CraftingRecipe>map(pair -> {
var flowerBlock = pair.getFirst().asItem();
var output = pair.getSecond();
var type = BuiltInRegistries.ITEM.getKey(flowerBlock);

Ingredient flower = Ingredient.of(flowerBlock);
NonNullList<Ingredient> inputs = NonNullList.createWithCapacity(flowerCount + weedCount + 1);
for (int i = 0; i < flowerCount; i++) inputs.add(flower);
for (int i = 0; i < weedCount; i++) inputs.add(weed);
inputs.add(base);

ResourceLocation id = group.withSuffix("/" + type.getNamespace() + "/" + type.getPath());
return new ShapelessRecipe(id, group.toString(), CraftingBookCategory.MISC, output, inputs);
});
}

Ingredient flower = Ingredient.of(flowerBlock);
NonNullList<Ingredient> inputs = NonNullList.of(Ingredient.EMPTY, flower, flower, flower, weed, weed, weed, bowl);
ResourceLocation id = new ResourceLocation(NirvanaConstants.MOD_ID, group + flowerBlock.getDescriptionId());
return new ShapelessRecipe(id, group, CraftingBookCategory.MISC, output, inputs);
})
.toList();
public static List<CraftingRecipe> createSuspiciousRecipes() {
return Stream.of(
createSuspiciousRecipes(Ingredient.of(Items.BOWL), NirvanaItems.HERBAL_SALVE, 3, 3),
createSuspiciousRecipes(Ingredient.of(NirvanaItems.EMPTY_PIPE), NirvanaItems.FILLED_PIPE, 6, 1)
).flatMap(Function.identity()).toList();
}

public static void register() {
Expand Down
2 changes: 2 additions & 0 deletions common/src/main/java/galena/nirvana/index/NirvanaTags.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ public class NirvanaTags {

public static final TagKey<Item> SHEARS = TagKey.create(Registries.ITEM, new ResourceLocation(NirvanaConstants.MOD_ID, "shears"));

public static final TagKey<Item> SMOKING_ITEM = TagKey.create(Registries.ITEM, new ResourceLocation(NirvanaConstants.MOD_ID, "smoking_item"));

}
Original file line number Diff line number Diff line change
@@ -1,30 +1,26 @@
package galena.nirvana.mixins;

import com.mojang.blaze3d.vertex.PoseStack;
import galena.nirvana.world.item.SmokingItem;
import net.minecraft.client.player.AbstractClientPlayer;
import galena.nirvana.index.NirvanaTags;
import net.minecraft.client.renderer.ItemInHandRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.UseAnim;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.Redirect;

@Mixin(ItemInHandRenderer.class)
public class ItemInHandRendererMixin {

@Inject(
@Redirect(
method = "renderArmWithItem",
at = @At("HEAD"),
cancellable = true
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;getUseAnimation()Lnet/minecraft/world/item/UseAnim;")
)
public void hideFirstPersonJoint(AbstractClientPlayer player, float f, float g, InteractionHand hand, float h, ItemStack stack, float i, PoseStack pose, MultiBufferSource multiBufferSource, int j, CallbackInfo ci) {
if(!(stack.getItem() instanceof SmokingItem)) return;
if(player.getUseItem() != stack) return;
public UseAnim hideFirstPersonJoint(ItemStack instance) {
var defaultAnimation = instance.getUseAnimation();
if(!(instance.is(NirvanaTags.SMOKING_ITEM))) return defaultAnimation;
// if(player.getUseItem() != instance) return defaultAnimation;

ci.cancel();
return UseAnim.BOW;
}

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
package galena.nirvana.world.item;

import com.google.common.collect.ImmutableList;
import galena.nirvana.platform.Services;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
Expand All @@ -22,29 +18,8 @@ public HerbalSalveItem(Properties properties) {
super(properties);
}

public static List<MobEffectInstance> getEffects(ItemStack stack) {
var builder = ImmutableList.<MobEffectInstance>builder();

CompoundTag compoundTag = stack.getTag();

if (compoundTag != null && compoundTag.contains("Effects", 9)) {
ListTag listTag = compoundTag.getList("Effects", 10);

for (int i = 0; i < listTag.size(); ++i) {
CompoundTag effectTag = listTag.getCompound(i);
int duration;
if (effectTag.contains("EffectDuration", 99)) {
duration = effectTag.getInt("EffectDuration");
} else {
duration = Services.CONFIG.common().herbalSalveDuration();
}

MobEffect mobEffect = MobEffect.byId(effectTag.getInt("EffectId"));
if (mobEffect != null) builder.add(new MobEffectInstance(mobEffect, duration));
}
}

return builder.build();
private static List<MobEffectInstance> getEffects(ItemStack stack) {
return SuspiciousItem.getEffects(stack, Services.CONFIG.common().herbalSalveDuration());
}

@Override
Expand Down
Loading

0 comments on commit 1192ceb

Please sign in to comment.