Перейти к публикации
NeTimaDev

DivineRPG 1 Пасхалочка с луком из Alfheim!

Рекомендованные сообщения

Здорово, миньоны!
Хочу вам рассказать о пасхалке, добавленной в Alfheim
AlexSocol(автор) еще давно. Она светилась на просторах интернета, однако почему-то до сих пор не появлялась на русских игровых форумах, посвященным теме майнкрафта.

Пасхалочка связана с луком "Катастрофа Феба"(см.ниже) - реликвией, которая выпадает с флюгеля 3-го уровня на момент его третьего убийства.
image.png.d980e4239004325f95f70eb445119c73.png

 

Сам по себе - лук примечателен тем, что он не требует стрел, как это делают остальное оружие аналогичного типа. Его основной расходник - мана, который варьируется в прогрессии от 100 до 1000 за выстрел в соответствии с силой натягивания лука. Также лук имеет свою способность, как и остальные реликвии - при выстреле в звездное небо луч маны выпадает в виде световых столбов, которые наносят урон.

image.thumb.png.23fa06d7871bc9a247aefca9ead18e69.png

 

Пасхалка заключается в том, что можно придать новый внешний вид реликвии, переименовав его в

"i'm a banana"
(регистр букв не важен)

в результате чего он будет выглядеть следующим образом:

image.thumb.png.9b4f50dbe2365a0c777649731c472af6.png

 

Изменения после переименования:

  •                                    Новая уникальная модель реликвии (иконка не изменяется)
  •                                        Новые цветные эффекты при выстреле
  •                                        BANANAAA!!!

На этом все. Спасибо за прочтение, пытался выдавить из этого все, что только можно. Надеюсь вы сможете удивить своего тиммейта после прочтения моей статьи, показав ему свой банан.
image.png.fe63aee3f771272681690b943753f39d.png

 

Скрытый текст

class ItemMoonlightBow: ItemBow(), IRelic {
	
	lateinit var icons: Array<IIcon>
	lateinit var moonD: IIcon
	lateinit var moons: Array<IIcon>
	lateinit var bownana: IIcon
	
	init {
		creativeTab = AlfheimTab
		maxDamage = 0
		maxStackSize = 1
		setFull3D()
		unlocalizedName = "MoonlightBow"
	}
	
	override fun getAttributeModifiers(stack: ItemStack): Multimap<String, AttributeBase> {
		val attrib = super.getAttributeModifiers(stack)
		val uuid = UUID(unlocalizedName.hashCode().toLong(), 0)
		attrib.put(SharedMonsterAttributes.attackDamage.attributeUnlocalizedName, AttributeModifier(uuid, "Weapon modifier", 5.0, 0))
		return attrib as Multimap<String, AttributeBase>
	}
	
	override fun onItemRightClick(stack: ItemStack, world: World, player: EntityPlayer): ItemStack {
		if (isRightPlayer(player, stack))
			player.setItemInUse(stack, getMaxItemUseDuration(stack))
		return stack
	}
	
	override fun isItemTool(stack: ItemStack) = true
	
	override fun getMaxItemUseDuration(stack: ItemStack) = 72000
	
	override fun getItemUseAction(stack: ItemStack) = EnumAction.bow
	
	override fun onUsingTick(stack: ItemStack, player: EntityPlayer, count: Int) {
		if (player.worldObj.isRemote) {
			val v = Vector3()
			val l = player.lookVec
			val look = Vector3()
			val p = Vector3.fromEntity(player).add(0, 1.62, 0)
			val ds = arrayOf(0.3, 0.8)
			val moon = isLookingAtMoon(player.entityWorld, player, mc.timer.renderPartialTicks, false)
			var r = 0.1f * if (moon) 3 else 1
			var g = 0.85f
			var b = if (moon) g else 0.1f
			
			if (!moon && stack.displayName.lowercase().trim() == "i'm a banana") {
				r = 0.95f
				g = 0.95f
				b = 0.1f
			}
			
			for (d in ds) {
				for (i in 1..36) {
					v.set(0.0, d, 0.0)
					v.rotate(i * 10.0, Vector3.oZ)
					v.rotate(player.rotationPitch.D, Vector3.oX)
					v.rotate(-player.rotationYaw.D, Vector3.oY)
					v.add(look.set(l).mul(if (d == 0.3) 1.75 else 1.0)).add(p)
					Botania.proxy.wispFX(player.worldObj, v.x, v.y, v.z, r, g, b, if (d == 0.3) 0.1f else 0.25f, 0f, 0.1f)
				}
			}
		}
	}
	
	override fun onPlayerStoppedUsing(stack: ItemStack, world: World, player: EntityPlayer, itemInUse: Int) {
		if (!isRightPlayer(player, stack)) return
		val m = maxDmg / 10
		val i = ((getMaxItemUseDuration(stack) - itemInUse) * chargeVelocityMultiplier).I
		if (i < m) return
		val rank = (i - m) / 5
		var dmg = min(maxDmg, m + rank * 2).F
		var mana = min(maxDmg * 10, maxDmg + rank * 20) * 5
		var life = min(150, 5 + i * 4)
		var dispersion = 1f
		var speed = 2.5f
		if (dmg >= maxDmg && isLookingAtMoon(world, player, 0f, false)) {
			dmg = -1f
			mana = 20000
			life = 200
			dispersion = 0f
			speed = 5f
		}
		
		if (ManaItemHandler.requestManaExactForTool(stack, player, mana, true)) {
			val arrow = EntityMagicArrow(world, player)
			arrow.shoot(player, player.rotationPitch, player.rotationYaw, 0f, speed, dispersion)
			arrow.damage = dmg
			arrow.rotationYaw = player.rotationYaw
			arrow.rotation = MathHelper.wrapAngleTo180_float(-player.rotationYaw + 180)
			arrow.banana = dmg != -1f && stack.displayName.lowercase().trim() == "i'm a banana"
			
			if (dmg != -1f) {
				val j = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack)
				if (j > 0) arrow.damage *= j * 0.1f + 1f
				arrow.damage += player.getEntityAttribute(SharedMonsterAttributes.attackDamage).attributeValue.F
			}
			
			arrow.life = life
			
			if (!world.isRemote)
				world.spawnEntityInWorld(arrow)
			
			player.playSoundAtEntity("random.bow", 1f, 1f / (Item.itemRand.nextFloat() * 0.4f + 1.2f) + 0.5f)
		}
	}
	
	val chargeVelocityMultiplier: Float
		get() = AlfheimConfigHandler.moonbowVelocity
	
	val maxDmg: Int
		get() = AlfheimConfigHandler.moonbowMaxDmg
	
	override fun addInformation(stack: ItemStack, player: EntityPlayer, list: MutableList<Any?>, adv: Boolean) {
//		list.add(StatCollector.translateToLocalFormatted("${getUnlocalizedNameInefficiently(stack)}.desc", 2 * EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack)))
//		list.add("")
		ItemRelic.addBindInfo(list, stack, player)
		super.addInformation(stack, player, list, adv)
	}
	
	override fun registerIcons(reg: IIconRegister) {
		itemIcon = reg.registerIcon("${ModInfo.MODID}:PhoebusBow")
		moonD = reg.registerIcon("${ModInfo.MODID}:MoonBow")
		bownana = reg.registerIcon("${ModInfo.MODID}:Bownana")
		
		icons = Array(4) {
			reg.registerIcon("${ModInfo.MODID}:PhoebusBow_${it + 1}")
		}
		
		moons = Array(4) {
			reg.registerIcon("${ModInfo.MODID}:MoonBow_${it + 1}")
		}
	}
	
	override fun getItemIconForUseDuration(dur: Int) = icons[dur]
	
	override fun getIcon(stack: ItemStack, renderPass: Int, player: EntityPlayer?, usingItem: ItemStack?, useRemaining: Int): IIcon {
		val m = maxDmg / 10
		val j = (((stack.maxItemUseDuration - useRemaining) * chargeVelocityMultiplier - m) / 5) * 2 + m
		
		var iconD = itemIcon
		var iconA = icons
		var moon = false
		
		if (player != |) {
			if (isLookingAtMoon(player.worldObj, player, mc.timer.renderPartialTicks, false)) {
				moon = true
				iconD = moonD
				iconA = moons
			}
		}
		
		return if (!moon && stack.displayName.lowercase().trim() == "i'm a banana")
			bownana
		else if (usingItem == |) {
			iconD
		} else if (j >= maxDmg) {
			iconA[3]
		} else if (j >= maxDmg / 3f * 2f) {
			iconA[2]
		} else if (j > maxDmg / 3f) {
			iconA[1]
		} else {
			if (j > 0) iconA[0] else iconD
		}
	}

 

Также, для тех, кому нужно - оставляю исходники реликвии.
Те, кто не понимает что такое обфускация - даже не открывайте.
Если я что-то упустил - поправьте меня, буду благодарен!

 

 

Изменено пользователем NeTimaDev:
  • Лайк 2

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×