Skip to content

Instantly share code, notes, and snippets.

自動装備の再現

やりたいこと

Minecraftのいつかのバージョンから、ゾンビや腐豚が落ちているアイテムを拾い、それを装備するようになりました。
これの装備をする機能をメソッドとして再現します。

バニラの自動装備

まず作る前にバニラの機能をおさらいします。 ![a][2]
(GIFでかいですね)
まず、MOBは一番いいものを装備します。

ポーションに関して学んだこと

今日はプラグインじゃないよ。
学んだことを箇条書きしていくよ。


ポーションの効果時間について

  • 効力が上がると継続時間は1/2
  • 延長すると継続時間は8/3
  • スプラッシュにすると継続時間は3/4

なのでポーションを延長してスプラッシュにすると継続時間は2倍になる。

@keepoff07
keepoff07 / 2015-04-07.md
Last active August 29, 2015 14:19
ポーション

なにこれ

[この前のやつ][1]使ってダメージ値から[PotionEffect][2]を返すものを作った。

ポーションは初期状態で細かいデータタグを何も持っていないため、
[PotionMeta][3]のgetCustomEffects()から取得するが出来ません。
だからこんな面倒なもの書いてみました。

説明

PotionEffectの三次元配列用意して色々。
第一位配列のサイズは2、ここで飲むポーション(0)か、スプラッシュ(1)か。

@keepoff07
keepoff07 / DefaultPotion.java
Created April 27, 2015 09:30
[Bukkit] DefaultPotion (for 1.8.x): ダメージ値でデフォルトのPotionEffectを返す
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class DefaultPotion {
private static PotionEffect[][][] effect = {
{
{
null,
null,
null,
@keepoff07
keepoff07 / ChestLockReflect.java
Last active August 29, 2015 14:20
[Bukkit] NBTデータタグの「Lock」を編集する
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
public class ChestLockReflect {
private static String version;
private static boolean v1_8 = false;
static {
@keepoff07
keepoff07 / 2015-06-18.md
Last active August 29, 2015 14:23
printf("「えーと、次のレベルまで…ネスは"+getTotalExp(ネス)+"。それはそうと何の用だい?」");

Exp now

問題提起

BukkitAPIにおいて、Playerクラスから使えるメソッドの内、経験値に関係するものがいくつかあります。

totalExp(これまで取得した経験値量の合計)関係

  • getTotalExperience() : int - Player: _totalExp_を取得する
  • setTotalExperience(int arg) : void - Player: _totalExp_をセットする

exp(現在のXPゲージの割合。0.0~1.0で表す)関係

  • getExp() : float - Player: _exp_を取得する
@keepoff07
keepoff07 / gist:b31444e02b342813312b
Created June 17, 2015 17:23
次のレベルまでの経験値量
public static int getNextLevelExp(Player player) {
int max = player.getExpToLevel();
return max - Math.round((float)max * player.getExp());
}
@keepoff07
keepoff07 / getTouchLocation.java
Created July 1, 2015 11:34
[Bukkit] PlayerInteractEventでクリックしたブロックの詳しいLocationを取得する | あるふぁ
Location getTouchLocation(PlayerInteractEvent event) {
Action action = event.getAction();
if(!(action.equals(Action.LEFT_CLICK_BLOCK) || action.equals(Action.RIGHT_CLICK_BLOCK))) return null;
Location O = event.getPlayer().getEyeLocation();
Block block = event.getClickedBlock();
Location P = block.getLocation().subtract(O);
double Yaw = (double)O.getYaw();
if(Yaw > 0) Yaw -= 360;
double AngY = Math.toRadians(Math.abs(Yaw));
double AngP = Math.toRadians(O.getPitch()*-1d);
@keepoff07
keepoff07 / 2015-07-12.md
Last active December 7, 2015 12:13
Non Non Biyori

![][01]
![][02]
![][03]
![][04]
![][05]
![][06]
![][07]
![][08]
![][09]
![][10]

@keepoff07
keepoff07 / 2015-07-16.java
Last active August 29, 2015 14:25
看板に書かれた文字(NBTTag)を読み書きする
import java.lang.reflect.Method;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
public class SignInterface {