Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(actions): Weather-related actions #50

Open
wants to merge 8 commits into
base: develop
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
Expand All @@ -16,6 +17,7 @@
import org.kunlab.scenamatica.nms.types.entity.NMSEntityItem;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityLiving;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityPlayer;
import org.kunlab.scenamatica.nms.types.entity.NMSLightningStrike;
import org.kunlab.scenamatica.nms.types.item.NMSItemStack;
import org.kunlab.scenamatica.nms.types.world.NMSWorldServer;

Expand All @@ -35,6 +37,8 @@ public interface WrapperProvider

NMSEntityPlayer wrap(Player bukkitEntity);

NMSLightningStrike wrap(LightningStrike bukkitLightningStrike);

// ==================[ ITEMS ]==================

NMSItemStack wrap(ItemStack bukkitItemStack);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.kunlab.scenamatica.nms.enums.entity;

import org.bukkit.event.weather.LightningStrikeEvent;

public enum NMSLightningStrikeCause
{
COMMAND,
TRIDENT,
TRAP,
WEATHER,
UNKNOWN;

public static NMSLightningStrikeCause fromBukkit(LightningStrikeEvent.Cause cause)
{
if (cause == null)
return null;

switch (cause)
{
case COMMAND:
return COMMAND;
case TRIDENT:
return TRIDENT;
case TRAP:
return TRAP;
case WEATHER:
return WEATHER;
default:
return UNKNOWN;
}
}

public static LightningStrikeEvent.Cause toBukkit(NMSLightningStrikeCause cause)
{
switch (cause)
{
case COMMAND:
return LightningStrikeEvent.Cause.COMMAND;
case TRIDENT:
return LightningStrikeEvent.Cause.TRIDENT;
case TRAP:
return LightningStrikeEvent.Cause.TRAP;
case WEATHER:
return LightningStrikeEvent.Cause.WEATHER;
default:
return null;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.kunlab.scenamatica.nms.types.entity;

import org.bukkit.entity.LightningStrike;

/**
* {@link LightningStrike} のラッパです。
*/
public interface NMSLightningStrike extends NMSEntity
{
/**
* 雷が視覚的なものだけかどうかを取得します。
*
* @param visualOnly 視覚的なものだけかどうか
* @see LightningStrike#isEffect()
*/
void setVisualOnly(boolean visualOnly);

/**
* ラップしている {@link LightningStrike} を取得します。
*
* @return {@link LightningStrike}
*/
@Override
LightningStrike getBukkit();
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package org.kunlab.scenamatica.nms.types.world;

import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LightningStrike;
import org.jetbrains.annotations.NotNull;
import org.kunlab.scenamatica.nms.NMSWrapped;
import org.kunlab.scenamatica.nms.Versioned;
import org.kunlab.scenamatica.nms.enums.entity.NMSLightningStrikeCause;

/**
* WorldServer の NMS による実装を提供します。
Expand Down Expand Up @@ -38,4 +41,23 @@ public interface NMSWorldServer extends NMSWrapped
@NotNull
@Versioned(from = "1.17")
NMSPersistentEntitySectionManager<Entity> getEntityManager();

/**
* ワールドに落雷を発生させます。
*
* @param location 落雷の位置
* @param isEffect 落雷のエフェクトを表示するかどうか
* @param cause 落雷の原因
*/
@Versioned(from = "1.14")
void strikeLightning(@NotNull Location location, boolean isEffect, @NotNull NMSLightningStrikeCause cause);

/**
* ワールドに落雷を発生させます。
*
* @param strike 落雷のエンティティ
* @param cause 落雷の原因
*/
@Versioned(from = "1.14")
void strikeLightning(@NotNull LightningStrike strike, @NotNull NMSLightningStrikeCause cause);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
Expand All @@ -16,6 +17,7 @@
import org.kunlab.scenamatica.nms.impl.v1_13_R1.entity.NMSEntityItemImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R1.entity.NMSEntityLivingImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R1.entity.NMSEntityPlayerImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R1.entity.NMSLightningStrikeImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R1.item.NMSItemStackImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R1.world.NMSWorldServerImpl;
import org.kunlab.scenamatica.nms.types.NMSMinecraftServer;
Expand All @@ -25,6 +27,7 @@
import org.kunlab.scenamatica.nms.types.entity.NMSEntityItem;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityLiving;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityPlayer;
import org.kunlab.scenamatica.nms.types.entity.NMSLightningStrike;
import org.kunlab.scenamatica.nms.types.item.NMSItemStack;
import org.kunlab.scenamatica.nms.types.world.NMSWorldServer;

Expand Down Expand Up @@ -60,6 +63,11 @@ public class WrapperProviderImpl implements WrapperProvider
return new NMSEntityPlayerImpl(bukkitEntity);
}

public static NMSLightningStrike wrap$(LightningStrike bukkitLightningStrike)
{
return new NMSLightningStrikeImpl(bukkitLightningStrike);
}

public static NMSItemStack wrap$(ItemStack bukkitItemStack)
{
return new NMSItemStackImpl(bukkitItemStack);
Expand Down Expand Up @@ -105,6 +113,12 @@ public NMSEntityPlayer wrap(Player bukkitEntity)
return wrap$(bukkitEntity);
}

@Override
public NMSLightningStrike wrap(LightningStrike bukkitLightningStrike)
{
return wrap$(bukkitLightningStrike);
}

@Override
public NMSItemStack wrap(ItemStack bukkitItemStack)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.kunlab.scenamatica.nms.impl.v1_13_R1.entity;

import net.minecraft.server.v1_13_R1.EntityLightning;
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftLightningStrike;
import org.bukkit.entity.LightningStrike;
import org.kunlab.scenamatica.nms.types.entity.NMSLightningStrike;

public class NMSLightningStrikeImpl extends NMSEntityImpl implements NMSLightningStrike
{
private final LightningStrike bukkitLightningStrike;
private final EntityLightning nmsLightning;

public NMSLightningStrikeImpl(LightningStrike bukkitLightningStrike)
{
super(bukkitLightningStrike);
this.bukkitLightningStrike = bukkitLightningStrike;
this.nmsLightning = ((CraftLightningStrike) bukkitLightningStrike).getHandle();
}

@Override
public void setVisualOnly(boolean visualOnly)
{
this.nmsLightning.isEffect = visualOnly;
}

@Override
public LightningStrike getBukkit()
{
return this.bukkitLightningStrike;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import net.minecraft.server.v1_13_R1.EntityLiving;
import net.minecraft.server.v1_13_R1.ItemStack;
import org.bukkit.craftbukkit.v1_13_R1.inventory.CraftItemStack;
import org.kunlab.scenamatica.nms.Versioned;
import org.kunlab.scenamatica.nms.enums.entity.NMSItemSlot;
import org.kunlab.scenamatica.nms.impl.v1_13_R1.NMSRegistryImpl;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityLiving;
Expand Down Expand Up @@ -73,7 +72,7 @@ public org.bukkit.inventory.ItemStack getBukkit()
}

@Override
public <T extends NMSEntityLiving> @Versioned void damage(int damage, T owner, NMSItemSlot slot)
public <T extends NMSEntityLiving> void damage(int damage, T owner, NMSItemSlot slot)
{
this.nmsItemStack.damage(
damage,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package org.kunlab.scenamatica.nms.impl.v1_13_R1.world;

import net.minecraft.server.v1_13_R1.WorldServer;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LightningStrike;
import org.jetbrains.annotations.NotNull;
import org.kunlab.scenamatica.nms.enums.entity.NMSLightningStrikeCause;
import org.kunlab.scenamatica.nms.exceptions.UnsupportedNMSOperationException;
import org.kunlab.scenamatica.nms.types.world.NMSChunkProvider;
import org.kunlab.scenamatica.nms.types.world.NMSPersistentEntitySectionManager;
Expand Down Expand Up @@ -58,4 +61,28 @@ public World getBukkit()
NMSPersistentEntitySectionManager.class
);
}

@Override
public void strikeLightning(@NotNull Location location, boolean isEffect, @NotNull NMSLightningStrikeCause cause)
{
throw UnsupportedNMSOperationException.of(
NMSWorldServer.class,
"strikeLightning",
void.class,
Location.class,
NMSLightningStrikeCause.class
);
}

@Override
public void strikeLightning(@NotNull LightningStrike entity, @NotNull NMSLightningStrikeCause cause)
{
throw UnsupportedNMSOperationException.of(
NMSWorldServer.class,
"strikeLightning",
void.class,
LightningStrike.class,
NMSLightningStrikeCause.class
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Item;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
Expand All @@ -16,6 +17,7 @@
import org.kunlab.scenamatica.nms.impl.v1_13_R2.entity.NMSEntityItemImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R2.entity.NMSEntityLivingImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R2.entity.NMSEntityPlayerImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R2.entity.NMSLightningStrikeImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R2.item.NMSItemStackImpl;
import org.kunlab.scenamatica.nms.impl.v1_13_R2.world.NMSWorldServerImpl;
import org.kunlab.scenamatica.nms.types.NMSMinecraftServer;
Expand All @@ -25,6 +27,7 @@
import org.kunlab.scenamatica.nms.types.entity.NMSEntityItem;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityLiving;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityPlayer;
import org.kunlab.scenamatica.nms.types.entity.NMSLightningStrike;
import org.kunlab.scenamatica.nms.types.item.NMSItemStack;
import org.kunlab.scenamatica.nms.types.world.NMSWorldServer;

Expand Down Expand Up @@ -60,6 +63,11 @@ public class WrapperProviderImpl implements WrapperProvider
return new NMSEntityPlayerImpl(bukkitEntity);
}

public static NMSLightningStrike wrap$(LightningStrike bukkitLightningStrike)
{
return new NMSLightningStrikeImpl(bukkitLightningStrike);
}

public static NMSItemStack wrap$(ItemStack bukkitItemStack)
{
return new NMSItemStackImpl(bukkitItemStack);
Expand Down Expand Up @@ -105,6 +113,12 @@ public NMSEntityPlayer wrap(Player bukkitEntity)
return wrap$(bukkitEntity);
}

@Override
public NMSLightningStrike wrap(LightningStrike bukkitLightningStrike)
{
return wrap$(bukkitLightningStrike);
}

@Override
public NMSItemStack wrap(ItemStack bukkitItemStack)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.kunlab.scenamatica.nms.impl.v1_13_R2.entity;

import net.minecraft.server.v1_13_R2.EntityLightning;
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftLightningStrike;
import org.bukkit.entity.LightningStrike;
import org.kunlab.scenamatica.nms.types.entity.NMSLightningStrike;

public class NMSLightningStrikeImpl extends NMSEntityImpl implements NMSLightningStrike
{
private final LightningStrike bukkitLightningStrike;
private final EntityLightning nmsLightning;

public NMSLightningStrikeImpl(LightningStrike bukkitLightningStrike)
{
super(bukkitLightningStrike);
this.bukkitLightningStrike = bukkitLightningStrike;
this.nmsLightning = ((CraftLightningStrike) bukkitLightningStrike).getHandle();
}

@Override
public void setVisualOnly(boolean visualOnly)
{
this.nmsLightning.isEffect = visualOnly;
}

@Override
public LightningStrike getBukkit()
{
return this.bukkitLightningStrike;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import net.minecraft.server.v1_13_R2.EntityLiving;
import net.minecraft.server.v1_13_R2.ItemStack;
import org.bukkit.craftbukkit.v1_13_R2.inventory.CraftItemStack;
import org.kunlab.scenamatica.nms.Versioned;
import org.kunlab.scenamatica.nms.enums.entity.NMSItemSlot;
import org.kunlab.scenamatica.nms.impl.v1_13_R2.NMSRegistryImpl;
import org.kunlab.scenamatica.nms.types.entity.NMSEntityLiving;
Expand Down Expand Up @@ -73,7 +72,7 @@ public org.bukkit.inventory.ItemStack getBukkit()
}

@Override
public <T extends NMSEntityLiving> @Versioned void damage(int damage, T owner, NMSItemSlot slot)
public <T extends NMSEntityLiving> void damage(int damage, T owner, NMSItemSlot slot)
{
this.nmsItemStack.damage(
damage,
Expand Down
Loading
Loading