Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 57 additions & 1 deletion src/main/java/de/dafuqs/spectrum/api/item/Preenchanted.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,24 @@
import net.minecraft.core.component.*;
import net.minecraft.core.registries.*;
import net.minecraft.resources.*;
import net.minecraft.tags.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.bus.api.*;´
import net.neoforged.fml.common.*;´
import net.neoforged.neoforge.event.*;
import org.jetbrains.annotations.*;
import org.jspecify.annotations.Nullable;

import java.util.*;

@EventBusSubscriber
public interface Preenchanted {

Map<ResourceKey<Enchantment>, Integer> getDefaultEnchantments();
@ApiStatus.Internal
Random random = new Random();

Map<ResourceKey<Enchantment>, Integer> getDefaultEnchantments();
static ItemEnchantments buildDefaultEnchantments(HolderLookup.Provider lookup, Preenchanted item) {
ItemEnchantments.Mutable builder = new ItemEnchantments.Mutable(ItemEnchantments.EMPTY);
for (Map.Entry<ResourceKey<Enchantment>, Integer> entry : item.getDefaultEnchantments().entrySet()) {
Expand Down Expand Up @@ -50,4 +58,52 @@ default boolean onlyHasPreEnchantments(ItemStack stack) {
return defaultEnchants.isEmpty();
}

@ApiStatus.Internal
@SubscribeEvent
static void onGrindStonePlace(GrindstoneEvent.OnPlaceItem event) {
if(!event.getTopItem().isEmpty() && !event.getBottomItem().isEmpty()) {
return;
}
Preenchanted itemInstance = null;
ItemStack stack = null;
if (event.getTopItem().getItem() instanceof Preenchanted preenchanted) {
itemInstance = preenchanted;
stack = event.getTopItem();
}
if (event.getBottomItem().getItem() instanceof Preenchanted preenchanted) {
itemInstance = preenchanted;
stack = event.getBottomItem();
}
if (itemInstance == null) {
return;
}
ItemEnchantments itemEnchantments = stack.get(DataComponents.ENCHANTMENTS);
if (itemEnchantments == null) {
return;
}
ItemStack output = stack.copy();
ItemEnchantments.Mutable outputBuilder = new ItemEnchantments.Mutable(ItemEnchantments.EMPTY);
int xp = 0;
for (Object2IntMap.Entry<Holder<Enchantment>> existingEnchantment : itemEnchantments.entrySet()) {
Holder<Enchantment> holder = existingEnchantment.getKey();
Integer defaultLevel = itemInstance.getDefaultEnchantments().get(holder.getKey());
int existingLevel = existingEnchantment.getIntValue();
if (defaultLevel != null && defaultLevel <= existingLevel) {
outputBuilder.set(existingEnchantment.getKey(), defaultLevel);
if (!holder.is(EnchantmentTags.CURSE)){
xp += holder.value().getMinCost(existingLevel) - holder.value().getMinCost(defaultLevel);
}
} else if (!holder.is(EnchantmentTags.CURSE)){
xp += holder.value().getMinCost(existingLevel);
}
}
output.set(DataComponents.ENCHANTMENTS, outputBuilder.toImmutable());
event.setOutput(output);
if (xp == 0) {
event.setXp(xp);
return;
}
xp = (int)Math.ceil(xp / 2.0);
event.setXp( xp + random.nextInt(xp));
}
}
12 changes: 12 additions & 0 deletions src/main/java/de/dafuqs/spectrum/items/armor/BedrockArmorItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

import de.dafuqs.spectrum.*;
import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import de.dafuqs.spectrum.registries.client.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.entity.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import javax.annotation.*;

public abstract class BedrockArmorItem extends ArmorItem implements Preenchanted {
Expand Down Expand Up @@ -42,4 +46,12 @@ public boolean makesPiglinsNeutral(ItemStack stack, LivingEntity wearer) {
return true;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}

}
11 changes: 11 additions & 0 deletions src/main/java/de/dafuqs/spectrum/items/tools/BedrockAxeItem.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package de.dafuqs.spectrum.items.tools;

import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import java.util.*;

Expand All @@ -23,4 +26,12 @@ public boolean isEnchantable(ItemStack stack) {
return true;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}

}
12 changes: 12 additions & 0 deletions src/main/java/de/dafuqs/spectrum/items/tools/BedrockBowItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

import de.dafuqs.arrowhead.api.*;
import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.entity.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import javax.annotation.*;

import java.util.*;
Expand Down Expand Up @@ -41,4 +45,12 @@ public float getDivergenceMod(ItemStack stack, LivingEntity shooter) {
return 0.8F;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

import de.dafuqs.arrowhead.api.*;
import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.entity.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import javax.annotation.*;

import java.util.*;
Expand Down Expand Up @@ -41,4 +45,12 @@ public float getDivergenceMod(ItemStack stack, LivingEntity shooter) {
return 0.8F;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
import de.dafuqs.spectrum.entity.entity.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.*;
import net.minecraft.core.*;
import net.minecraft.network.chat.*;
import net.minecraft.resources.*;
import net.minecraft.world.entity.player.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.minecraft.world.level.*;
import net.minecraft.world.level.material.*;
import net.neoforged.neoforge.common.util.*;

import javax.annotation.*;

import java.util.*;
Expand Down Expand Up @@ -47,4 +50,11 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List<Compon
tooltip.add(Component.translatable("item.spectrum.bedrock_fishing_rod.tooltip").withStyle(ChatFormatting.GRAY));
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}
}
11 changes: 11 additions & 0 deletions src/main/java/de/dafuqs/spectrum/items/tools/BedrockHoeItem.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package de.dafuqs.spectrum.items.tools;

import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import java.util.*;

Expand All @@ -23,4 +26,12 @@ public boolean isEnchantable(ItemStack stack) {
return true;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}

}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package de.dafuqs.spectrum.items.tools;

import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import java.util.*;

Expand All @@ -23,4 +26,11 @@ public boolean isEnchantable(ItemStack stack) {
return true;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package de.dafuqs.spectrum.items.tools;

import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import java.util.*;

Expand All @@ -23,4 +26,12 @@ public boolean isEnchantable(ItemStack stack) {
return true;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}

}
11 changes: 11 additions & 0 deletions src/main/java/de/dafuqs/spectrum/items/tools/BedrockSwordItem.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package de.dafuqs.spectrum.items.tools;

import de.dafuqs.spectrum.api.item.*;
import de.dafuqs.spectrum.registries.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import net.neoforged.neoforge.common.util.*;

import java.util.*;

Expand All @@ -23,4 +26,12 @@ public boolean isEnchantable(ItemStack stack) {
return true;
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,4 @@ public SpectrumPickaxeItem(Tier material, Properties settings) {
public Map<ResourceKey<Enchantment>, Integer> getDefaultEnchantments() {
return Map.of();
}

}
29 changes: 29 additions & 0 deletions src/main/java/de/dafuqs/spectrum/mixin/EnchantmentHelperMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package de.dafuqs.spectrum.mixin;

import com.llamalad7.mixinextras.injector.*;
import com.llamalad7.mixinextras.sugar.*;
import de.dafuqs.spectrum.api.item.*;
import net.minecraft.core.*;
import net.minecraft.resources.*;
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.*;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.*;

import java.util.*;
import java.util.stream.*;

@Mixin(EnchantmentHelper.class)
public abstract class EnchantmentHelperMixin {

@ModifyExpressionValue(method = "getAvailableEnchantmentResults",
at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;"
))
private static Stream<Holder<Enchantment>> doNothing(Stream<Holder<Enchantment>> original, @Local(argsOnly = true) ItemStack stack) {
if (stack.getItem() instanceof Preenchanted preenchanted) {
Map<ResourceKey<Enchantment>, Integer> defaultEnchantments = preenchanted.getDefaultEnchantments();
return original.filter(enchantmentHolder -> !defaultEnchantments.containsKey(enchantmentHolder.getKey()));
}
return original;
}
}
10 changes: 10 additions & 0 deletions src/main/java/de/dafuqs/spectrum/registries/SpectrumItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import de.dafuqs.spectrum.items.tools.*;
import de.dafuqs.spectrum.items.trinkets.*;
import de.dafuqs.spectrum.particle.effect.*;
import net.minecraft.core.*;
import net.minecraft.core.component.*;
import net.minecraft.network.chat.*;
import net.minecraft.resources.*;
Expand All @@ -37,6 +38,7 @@
import net.minecraft.world.level.material.*;
import net.neoforged.bus.api.*;
import net.neoforged.neoforge.common.*;
import net.neoforged.neoforge.common.util.*;
import net.neoforged.neoforge.fluids.*;
import net.neoforged.neoforge.registries.*;

Expand Down Expand Up @@ -134,6 +136,14 @@ public Map<ResourceKey<Enchantment>, Integer> getDefaultEnchantments() {
public Map<ResourceKey<Enchantment>, Integer> getDefaultEnchantments() {
return Map.of(Enchantments.SILK_TOUCH, 1);
}

@Override
public boolean supportsEnchantment(ItemStack stack, Holder<Enchantment> enchantment) {
TriState triState = SpectrumToolTiers.supportsBedrockTierEnchantment(enchantment);
if (triState.isFalse())
return false;
return super.supportsEnchantment(stack, enchantment);
}
});
public static final DeferredItem<BedrockAxeItem> BEDROCK_AXE = register("bedrock_axe", () -> new BedrockAxeItem(SpectrumToolTiers.BEDROCK, IS.of(Rarity.UNCOMMON).attributes(AxeItem.createAttributes(SpectrumToolTiers.BEDROCK, 5, -3.0F)).fireResistant().durability(SpectrumToolTiers.BEDROCK.getUses()).component(DataComponents.UNBREAKABLE, new Unbreakable(false))));
public static final DeferredItem<BedrockShovelItem> BEDROCK_SHOVEL = register("bedrock_shovel", () -> new BedrockShovelItem(SpectrumToolTiers.BEDROCK, IS.of(Rarity.UNCOMMON).attributes(ShovelItem.createAttributes(SpectrumToolTiers.BEDROCK, 1, -3.0F)).fireResistant().durability(SpectrumToolTiers.BEDROCK.getUses()).component(DataComponents.UNBREAKABLE, new Unbreakable(false))));
Expand Down
Loading