Skip to content

Commit 6a68260

Browse files
authored
Merge pull request #1250 from Lildirt/hanging_place
Add hanging_place event
2 parents 612736e + cbb47d7 commit 6a68260

File tree

5 files changed

+124
-0
lines changed

5 files changed

+124
-0
lines changed

src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitEntityEvents.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import com.laytonsmith.abstraction.events.MCEntityUnleashEvent;
5959
import com.laytonsmith.abstraction.events.MCFireworkExplodeEvent;
6060
import com.laytonsmith.abstraction.events.MCHangingBreakEvent;
61+
import com.laytonsmith.abstraction.events.MCHangingPlaceEvent;
6162
import com.laytonsmith.abstraction.events.MCItemDespawnEvent;
6263
import com.laytonsmith.abstraction.events.MCItemSpawnEvent;
6364
import com.laytonsmith.abstraction.events.MCPlayerDropItemEvent;
@@ -101,6 +102,7 @@
101102
import org.bukkit.event.entity.ProjectileLaunchEvent;
102103
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
103104
import org.bukkit.event.hanging.HangingBreakEvent;
105+
import org.bukkit.event.hanging.HangingPlaceEvent;
104106
import org.bukkit.event.player.PlayerDropItemEvent;
105107
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
106108
import org.bukkit.event.player.PlayerInteractEntityEvent;
@@ -810,6 +812,31 @@ public MCEntity getRemover() {
810812
}
811813
}
812814

815+
@abstraction(type = Implementation.Type.BUKKIT)
816+
public static class BukkitMCHangingPlaceEvent implements MCHangingPlaceEvent {
817+
818+
HangingPlaceEvent hpe;
819+
820+
public BukkitMCHangingPlaceEvent(Event event) {
821+
hpe = (HangingPlaceEvent) event;
822+
}
823+
824+
@Override
825+
public Object _GetObject() {
826+
return hpe;
827+
}
828+
829+
@Override
830+
public MCHanging getEntity() {
831+
return new BukkitMCHanging(hpe.getEntity());
832+
}
833+
834+
@Override
835+
public MCPlayer getPlayer() {
836+
return new BukkitMCPlayer(hpe.getPlayer());
837+
}
838+
}
839+
813840
@abstraction(type = Implementation.Type.BUKKIT)
814841
public static class BukkitMCEntityToggleGlideEvent implements MCEntityToggleGlideEvent {
815842

src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitEntityListener.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCEntityUnleashEvent;
1717
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCFireworkExplodeEvent;
1818
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCHangingBreakEvent;
19+
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCHangingPlaceEvent;
1920
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCItemDespawnEvent;
2021
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCItemSpawnEvent;
2122
import com.laytonsmith.abstraction.bukkit.events.BukkitEntityEvents.BukkitMCPlayerDropItemEvent;
@@ -54,6 +55,7 @@
5455
import org.bukkit.event.entity.ProjectileHitEvent;
5556
import org.bukkit.event.entity.ProjectileLaunchEvent;
5657
import org.bukkit.event.hanging.HangingBreakEvent;
58+
import org.bukkit.event.hanging.HangingPlaceEvent;
5759
import org.bukkit.event.player.PlayerDropItemEvent;
5860
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
5961
import org.bukkit.event.player.PlayerInteractEntityEvent;
@@ -185,6 +187,12 @@ public void onHangingBreak(HangingBreakEvent event) {
185187
EventUtils.TriggerListener(Driver.HANGING_BREAK, "hanging_break", hbe);
186188
}
187189

190+
@EventHandler(priority = EventPriority.LOWEST)
191+
public void onHangingPlace(HangingPlaceEvent event) {
192+
BukkitMCHangingPlaceEvent hpe = new BukkitMCHangingPlaceEvent(event);
193+
EventUtils.TriggerListener(Driver.HANGING_PLACE, "hanging_place", hpe);
194+
}
195+
188196
@EventHandler(priority = EventPriority.LOWEST)
189197
public void onEntityToggleGlide(EntityToggleGlideEvent event) {
190198
BukkitMCEntityToggleGlideEvent etge = new BukkitMCEntityToggleGlideEvent(event);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.laytonsmith.abstraction.events;
2+
3+
import com.laytonsmith.abstraction.MCPlayer;
4+
import com.laytonsmith.abstraction.entities.MCHanging;
5+
import com.laytonsmith.core.events.BindableEvent;
6+
7+
public interface MCHangingPlaceEvent extends BindableEvent {
8+
9+
MCHanging getEntity();
10+
11+
MCPlayer getPlayer();
12+
13+
}

src/main/java/com/laytonsmith/core/events/Driver.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public enum Driver {
4242
ENTITY_PORTAL_TRAVEL,
4343
ENTITY_UNLEASH,
4444
HANGING_BREAK,
45+
HANGING_PLACE,
4546
ITEM_DROP,
4647
ITEM_PICKUP,
4748
ITEM_DESPAWN,

src/main/java/com/laytonsmith/core/events/drivers/EntityEvents.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.laytonsmith.abstraction.events.MCEntityUnleashEvent;
4141
import com.laytonsmith.abstraction.events.MCFireworkExplodeEvent;
4242
import com.laytonsmith.abstraction.events.MCHangingBreakEvent;
43+
import com.laytonsmith.abstraction.events.MCHangingPlaceEvent;
4344
import com.laytonsmith.abstraction.events.MCItemDespawnEvent;
4445
import com.laytonsmith.abstraction.events.MCItemSpawnEvent;
4546
import com.laytonsmith.abstraction.events.MCPlayerDropItemEvent;
@@ -1856,6 +1857,80 @@ public boolean modifyEvent(String key, Mixed value, BindableEvent event) {
18561857
}
18571858
}
18581859

1860+
@api
1861+
public static class hanging_place extends AbstractEvent {
1862+
1863+
@Override
1864+
public String getName() {
1865+
return "hanging_place";
1866+
}
1867+
1868+
@Override
1869+
public String docs() {
1870+
return "{type: <macro> The entity type of the entity | player: <macro> The player triggering the event"
1871+
+ " | world: <macro> The world the entity is in}"
1872+
+ " This event is called when a player attempts to place an item frame, painting, or leash."
1873+
+ " {id: The entity ID of the entity. | type: The type of the hanging entity; can be ITEM_FRAME,"
1874+
+ " PAINTING, or LEASE_HITCH | location: Where the entity was placed. |"
1875+
+ " player: The name of the player which placed this entity. }"
1876+
+ " {}"
1877+
+ " {}";
1878+
}
1879+
1880+
@Override
1881+
public Version since() {
1882+
return MSVersion.V3_3_4;
1883+
}
1884+
1885+
@Override
1886+
public boolean matches(Map<String, Mixed> prefilter, BindableEvent event) throws PrefilterNonMatchException {
1887+
if(event instanceof MCHangingPlaceEvent) {
1888+
MCHangingPlaceEvent hangingPlaceEvent = (MCHangingPlaceEvent) event;
1889+
MCHanging hanging = hangingPlaceEvent.getEntity();
1890+
Prefilters.match(prefilter, "type", hanging.getType().name(), PrefilterType.MACRO);
1891+
Prefilters.match(prefilter, "player", hangingPlaceEvent.getPlayer().getName(), PrefilterType.MACRO);
1892+
Prefilters.match(prefilter, "world",
1893+
hangingPlaceEvent.getEntity().getLocation().getWorld().getName(), PrefilterType.MACRO);
1894+
return true;
1895+
} else {
1896+
return false;
1897+
}
1898+
}
1899+
1900+
@Override
1901+
public BindableEvent convert(CArray manualObject, Target t) {
1902+
return null;
1903+
}
1904+
1905+
@Override
1906+
public Map<String, Mixed> evaluate(BindableEvent event) throws EventException {
1907+
if(event instanceof MCHangingPlaceEvent) {
1908+
MCHangingPlaceEvent hangingPlaceEvent = (MCHangingPlaceEvent) event;
1909+
Map<String, Mixed> ret = evaluate_helper(event);
1910+
MCHanging hanging = hangingPlaceEvent.getEntity();
1911+
1912+
ret.put("type", new CString(hanging.getType().name(), Target.UNKNOWN));
1913+
ret.put("id", new CString(hanging.getUniqueId().toString(), Target.UNKNOWN));
1914+
ret.put("player", new CString(hangingPlaceEvent.getPlayer().getName(), Target.UNKNOWN));
1915+
ret.put("location", ObjectGenerator.GetGenerator().location(hanging.getLocation()));
1916+
return ret;
1917+
} else {
1918+
throw new EventException("Cannot convert event to HangingPlaceEvent");
1919+
}
1920+
}
1921+
1922+
@Override
1923+
public Driver driver() {
1924+
return Driver.HANGING_PLACE;
1925+
}
1926+
1927+
@Override
1928+
public boolean modifyEvent(String key, Mixed value, BindableEvent event) {
1929+
return false;
1930+
}
1931+
1932+
}
1933+
18591934
@api
18601935
public static class entity_toggle_glide extends AbstractEvent {
18611936

0 commit comments

Comments
 (0)