Skip to content

Commit

Permalink
New Enchantments: Vitality & Enlightenment
Browse files Browse the repository at this point in the history
+ new enchantment: Enlightenment
+ new enchantment: Vitality
+ fishing items were printing information to console (now it is disabled)
+ maximum Fishing Fanatic level name changed (from Fishing Fanatic VI to True Fishing Fanatic)
+ shield is now enchantable
+ new shield enchantments will be visible in Combat Tab Group
+ fixed wrong particles for HumanSlayerEnchantment (in version 1.16.3)
+ minor cod changes
  • Loading branch information
Majrusz committed Nov 5, 2020
1 parent 40d8164 commit f3176cb
Show file tree
Hide file tree
Showing 24 changed files with 480 additions and 49 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.wonderfulenchantments;

import com.wonderfulenchantments.enchantments.DodgeEnchantment;
import com.wonderfulenchantments.enchantments.FanaticEnchantment;
import com.wonderfulenchantments.enchantments.HumanSlayerEnchantment;
import com.wonderfulenchantments.enchantments.*;
import com.wonderfulenchantments.items.ShieldReplacementItem;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentType;
import net.minecraft.item.*;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
Expand All @@ -12,18 +13,38 @@

public class RegistryHandler {
public static final DeferredRegister< Enchantment > ENCHANTMENTS = new DeferredRegister<>( ForgeRegistries.ENCHANTMENTS, WonderfulEnchantments.MODID );
public static final DeferredRegister< Item > ITEMS_TO_REPLACE = new DeferredRegister<>( ForgeRegistries.ITEMS, "minecraft" );
public static class EnchantmentTypes {
public static final EnchantmentType SHIELD = EnchantmentType.create( "shield", ( Item itemIn ) -> { return itemIn instanceof ShieldItem; } );

public static void addTypeToItemGroup( EnchantmentType type, ItemGroup itemGroup ) {
EnchantmentType[] group = itemGroup.getRelevantEnchantmentTypes();
EnchantmentType[] temporary = new EnchantmentType[ group.length+1 ];
System.arraycopy( group, 0, temporary, 0, group.length );
temporary[ group.length-1 ] = type;

itemGroup.setRelevantEnchantmentTypes( temporary );
}
}

public static void init() {
final IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();

ENCHANTMENTS.register( modEventBus );
ITEMS_TO_REPLACE.register( modEventBus );

EnchantmentTypes.addTypeToItemGroup( EnchantmentTypes.SHIELD, ItemGroup.COMBAT );
}

// Enchantments
public static final RegistryObject< Enchantment >
FISHING_FANATIC = ENCHANTMENTS.register( "fishing_fanatic", FanaticEnchantment::new ),
HUMAN_SLAYER = ENCHANTMENTS.register( "human_slayer", HumanSlayerEnchantment::new ),
DODGE = ENCHANTMENTS.register( "dodge", DodgeEnchantment::new );

DODGE = ENCHANTMENTS.register( "dodge", DodgeEnchantment::new ),
ENLIGHTENMENT = ENCHANTMENTS.register( "enlightenment", EnlightenmentEnchantment::new ),
VITALITY = ENCHANTMENTS.register( "vitality", VitalityEnchantment::new );

// Items to replace
public static final RegistryObject< Item >
SHIELD_REPLACEMENT = ITEMS_TO_REPLACE.register( "shield", ShieldReplacementItem::new );
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ private void doClientStuff( final FMLClientSetupEvent event ) {

}

public static final String MODID = "wonderful_enchantments", VERSION = "0.1.1";
public static final String MODID = "wonderful_enchantments", VERSION = "0.2.0";
public static final Logger LOGGER = LogManager.getLogger();
public static final Random RANDOM = new Random();
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import net.minecraft.entity.LivingEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.ListNBT;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.event.entity.living.LivingDamageEvent;
Expand Down Expand Up @@ -67,16 +66,15 @@ public static void onEntityHurt( LivingDamageEvent event ) {
);
}

for( ItemStack itemstack : entity.getArmorInventoryList() ) {
ListNBT nbt = itemstack.getEnchantmentTagList();
for( ItemStack armor : entity.getArmorInventoryList() ) {
int level = EnchantmentHelper.getEnchantmentLevel( RegistryHandler.DODGE.get(), armor );

for( int i = 0; i < nbt.size(); ++i )
if( nbt.getCompound( i ).getString( "id" ).contains( "wonderful_enchantments:dodge" ) ) {
itemstack.damageItem( ( int )event.getAmount(), entity, ( e ) -> {
e.sendBreakAnimation( EquipmentSlotType.LEGS );
} );
break;
}
if( level > 0 ) {
armor.damageItem( ( int )event.getAmount(), entity, ( e ) -> {
e.sendBreakAnimation( EquipmentSlotType.LEGS );
} );
break;
}
}

event.setCanceled( true );
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.wonderfulenchantments.enchantments;

import com.wonderfulenchantments.RegistryHandler;
import com.wonderfulenchantments.WonderfulEnchantments;
import net.minecraft.enchantment.*;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.player.PlayerXpEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@Mod.EventBusSubscriber
public class EnlightenmentEnchantment extends Enchantment {
public EnlightenmentEnchantment() {
super( Rarity.RARE, EnchantmentType.ARMOR, new EquipmentSlotType[]{ EquipmentSlotType.HEAD, EquipmentSlotType.CHEST, EquipmentSlotType.LEGS, EquipmentSlotType.FEET } );
}

@Override
public int getMinEnchantability( int enchantmentLevel ) {
return 6 + enchantmentLevel * 12;
}

@Override
public int getMaxEnchantability( int enchantmentLevel ) {
return this.getMinEnchantability( enchantmentLevel ) + 20;
}

@Override
public int getMaxLevel() {
return 2;
}

@Override
public boolean canApply( ItemStack stack ) {
return super.canApply( stack );
}

@SubscribeEvent
public static void onXPPickUp( PlayerXpEvent.PickupXp event ) {
int levelSum = 0;
for( ItemStack armor : event.getPlayer().getArmorInventoryList() )
levelSum += EnchantmentHelper.getEnchantmentLevel( RegistryHandler.ENLIGHTENMENT.get(), armor );

if( levelSum > 0 ) {
double bonusRatio = 0.25D * (double) levelSum;
double randomBonus = bonusRatio * WonderfulEnchantments.RANDOM.nextDouble();
int bonusExp = (int) (Math.round(randomBonus * (double) event.getOrb().getXpValue()));

event.getPlayer().giveExperiencePoints(bonusExp);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.ListNBT;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.util.text.TranslationTextComponent;
Expand Down Expand Up @@ -64,6 +65,18 @@ public float calcDamageByCreature( int level, CreatureAttribute creature ) {
return ( float )level * 1.0F;
}

@Override
public ITextComponent getDisplayName( int level ) {
if( level == this.getMaxLevel() ) {
StringTextComponent message = new StringTextComponent( TextFormatting.GRAY + new TranslationTextComponent( "wonderful_enchantments.true_level" ).getUnformattedComponentText() );
message.appendSibling( new StringTextComponent( TextFormatting.GRAY + " " + new TranslationTextComponent( this.getName() ).getUnformattedComponentText() ) );

return message;

} else
return super.getDisplayName( level );
}

@SubscribeEvent
public static void fishingFanaticEvent( ItemFishedEvent event ) {
PlayerEntity player = event.getPlayer();
Expand Down Expand Up @@ -134,7 +147,7 @@ private static boolean tryIncreaseFishingFanaticLevel( PlayerEntity player ) {
ItemStack fishingRod = player.getHeldItemMainhand();
int enchantmentLevel = EnchantmentHelper.getMaxEnchantmentLevel( RegistryHandler.FISHING_FANATIC.get(), player );
double increaseChance = ( RegistryHandler.FISHING_FANATIC.get().getMaxLevel() - enchantmentLevel )/100.0D;
System.out.println( increaseChance );

boolean shouldIncreaseLevel = ( WonderfulEnchantments.RANDOM.nextDouble() < increaseChance );

if( shouldIncreaseLevel && ( enchantmentLevel < RegistryHandler.FISHING_FANATIC.get().getMaxLevel() ) ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
@Mod.EventBusSubscriber
public class HumanSlayerEnchantment extends DamageEnchantment {
public HumanSlayerEnchantment() {
super( Enchantment.Rarity.UNCOMMON, 3, EquipmentSlotType.MAINHAND );
super( Rarity.UNCOMMON, 3, EquipmentSlotType.MAINHAND );
}

@Override
Expand All @@ -37,6 +37,11 @@ public int getMaxEnchantability( int enchantmentLevel ) {
return this.getMinEnchantability( enchantmentLevel ) + 20;
}

@Override
public int getMaxLevel() {
return 5;
}

@Override
public float calcDamageByCreature( int level, CreatureAttribute creatureType ) {
return 0.0F;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package com.wonderfulenchantments.enchantments;

import com.wonderfulenchantments.RegistryHandler;
import com.wonderfulenchantments.WonderfulEnchantments;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
import net.minecraft.entity.ai.attributes.IAttributeInstance;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ShieldItem;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

import java.util.HashMap;
import java.util.UUID;

@Mod.EventBusSubscriber
public class VitalityEnchantment extends Enchantment {
public VitalityEnchantment() {
super( Rarity.RARE, RegistryHandler.EnchantmentTypes.SHIELD, new EquipmentSlotType[]{ EquipmentSlotType.OFFHAND } );
}

@Override
public int getMinEnchantability( int level ) {
return 5 + 8 * ( level );
}

@Override
public int getMaxEnchantability( int level ) {
return this.getMinEnchantability( level ) + 10;
}

@Override
public int getMaxLevel() {
return 3;
}

@Override
protected boolean canApplyTogether( Enchantment enchant ) {
return super.canApplyTogether( enchant );
}

@SubscribeEvent
public static void checkIfPlayerHasShield( TickEvent.PlayerTickEvent event ) {
PlayerEntity player = event.player;
String nickname = player.getDisplayName().getString();

if( !bonuses.containsKey( nickname ) )
VitalityEnchantment.bonuses.put( nickname, 0 );

int totalVitality = getVitalityBonus( player );
int currentMaxHealthBonus = getMaxHealthBonus( nickname );

if( totalVitality != currentMaxHealthBonus ) {
setMaxHealthBonus( nickname, totalVitality );
updateMaxHealthBonus( player );
}
}

private static int getVitalityBonus( PlayerEntity player ) {
int sum = 0;

ItemStack item1 = player.getHeldItemMainhand(),
item2 = player.getHeldItemOffhand();

if( item1.getItem() instanceof ShieldItem )
sum += EnchantmentHelper.getEnchantmentLevel( RegistryHandler.VITALITY.get(), item1 );

if( item2.getItem() instanceof ShieldItem )
sum += EnchantmentHelper.getEnchantmentLevel( RegistryHandler.VITALITY.get(), item2 );

return sum;
}

protected static HashMap< String, Integer > bonuses = new HashMap<>();
protected static final UUID MODIFIER_UUID = UUID.fromString( "575cb29a-1ee4-11eb-adc1-0242ac120002" );
protected static final String MODIFIER_NAME = "VitalityBonus";
private static void updateMaxHealthBonus( PlayerEntity player ) {
String nickname = player.getDisplayName().getString();
IAttributeInstance maxHealth = player.getAttribute( SharedMonsterAttributes.MAX_HEALTH );

maxHealth.removeModifier( MODIFIER_UUID );
AttributeModifier modifier = new AttributeModifier( MODIFIER_UUID, MODIFIER_NAME, 2*getMaxHealthBonus( nickname ), AttributeModifier.Operation.ADDITION );
maxHealth.applyModifier( modifier );
}

private static void setMaxHealthBonus( String nickname, int value ) {
VitalityEnchantment.bonuses.replace( nickname, value );
}

private static int getMaxHealthBonus( String nickname ) {
return VitalityEnchantment.bonuses.get( nickname );
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.wonderfulenchantments.items;

import net.minecraft.item.*;

public class ShieldReplacementItem extends ShieldItem {
public ShieldReplacementItem() {
super( ( new Item.Properties() )
.maxDamage( 336 )
.group( ItemGroup.COMBAT )
);
}

@Override
public int getItemEnchantability() {
return 1;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ issueTrackerURL="https://www.curseforge.com/minecraft/mc-mods/wonderful-enchantm

modId="wonderful_enchantments"

version="1.15.2-0.1.1"
version="1.15.2-0.2.0"

displayName="Wonderful Enchantments"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"enchantment.wonderful_enchantments.fishing_fanatic": "Fishing Fanatic",
"wonderful_enchantments.fanatic_level_up": "You have become greater Fishing Fanatic!",
"wonderful_enchantments.true_level": "True",
"enchantment.wonderful_enchantments.human_slayer": "Enchantment Against Humanity",
"enchantment.wonderful_enchantments.dodge": "Dodge"
"enchantment.wonderful_enchantments.dodge": "Dodge",
"enchantment.wonderful_enchantments.enlightenment": "Enlightenment",
"enchantment.wonderful_enchantments.vitality": "Vitality"
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"enchantment.wonderful_enchantments.fishing_fanatic": "Fishing Fanatic",
"wonderful_enchantments.fanatic_level_up": "You have become greater Fishing Fanatic!",
"wonderful_enchantments.true_level": "True",
"enchantment.wonderful_enchantments.human_slayer": "Enchantment Against Humanity",
"enchantment.wonderful_enchantments.dodge": "Dodge"
"enchantment.wonderful_enchantments.dodge": "Dodge",
"enchantment.wonderful_enchantments.enlightenment": "Enlightenment",
"enchantment.wonderful_enchantments.vitality": "Vitality"
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"enchantment.wonderful_enchantments.fishing_fanatic": "Fanatyk wędkarstwa",
"wonderful_enchantments.fanatic_level_up": "Stałeś się większym fanatykiem wędkarstwa!",
"wonderful_enchantments.true_level": "Prawdziwy",
"enchantment.wonderful_enchantments.human_slayer": "Zaklęcie przeciwko ludzkości",
"enchantment.wonderful_enchantments.dodge": "Unik"
"enchantment.wonderful_enchantments.dodge": "Unik",
"enchantment.wonderful_enchantments.enlightenment": "Oświecenie",
"enchantment.wonderful_enchantments.vitality": "Witalność"
}
Loading

0 comments on commit f3176cb

Please sign in to comment.