Skip to content

Commit afb13e6

Browse files
committed
Refactored Bukkit adapters
1 parent 83302f5 commit afb13e6

File tree

8 files changed

+966
-380
lines changed

8 files changed

+966
-380
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ Desktop.ini
175175

176176
.cursorrules
177177
.windsurfrules
178+
.clinerules
178179
context.json
179180
run.sh
180181
run_*.sh

src/main/java/net/coreprotect/bukkit/BukkitAdapter.java

Lines changed: 114 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,17 @@
3232
import net.coreprotect.config.ConfigHandler;
3333
import net.coreprotect.utility.BlockUtils;
3434

35+
/**
36+
* Base adapter implementation for Bukkit API compatibility.
37+
* Provides default implementations for methods that work across multiple Minecraft versions.
38+
* Version-specific implementations extend this class to provide specialized behavior.
39+
*/
3540
public class BukkitAdapter implements BukkitInterface {
3641

42+
/** The currently active adapter instance */
3743
public static BukkitInterface ADAPTER;
44+
45+
// Version constants for Bukkit implementations
3846
public static final int BUKKIT_V1_13 = 13;
3947
public static final int BUKKIT_V1_14 = 14;
4048
public static final int BUKKIT_V1_15 = 15;
@@ -45,33 +53,39 @@ public class BukkitAdapter implements BukkitInterface {
4553
public static final int BUKKIT_V1_20 = 20;
4654
public static final int BUKKIT_V1_21 = 21;
4755

56+
/**
57+
* Initializes the appropriate Bukkit adapter based on the server version.
58+
* This method should be called during plugin initialization.
59+
*/
4860
public static void loadAdapter() {
4961
switch (ConfigHandler.SERVER_VERSION) {
5062
case BUKKIT_V1_13:
5163
case BUKKIT_V1_14:
5264
case BUKKIT_V1_15:
5365
case BUKKIT_V1_16:
54-
BukkitAdapter.ADAPTER = new BukkitAdapter();
66+
ADAPTER = new BukkitAdapter();
5567
break;
5668
case BUKKIT_V1_17:
57-
BukkitAdapter.ADAPTER = new Bukkit_v1_17();
69+
ADAPTER = new Bukkit_v1_17();
5870
break;
5971
case BUKKIT_V1_18:
60-
BukkitAdapter.ADAPTER = new Bukkit_v1_18();
72+
ADAPTER = new Bukkit_v1_18();
6173
break;
6274
case BUKKIT_V1_19:
63-
BukkitAdapter.ADAPTER = new Bukkit_v1_19();
75+
ADAPTER = new Bukkit_v1_19();
6476
break;
6577
case BUKKIT_V1_20:
66-
BukkitAdapter.ADAPTER = new Bukkit_v1_20();
78+
ADAPTER = new Bukkit_v1_20();
6779
break;
6880
case BUKKIT_V1_21:
6981
default:
70-
BukkitAdapter.ADAPTER = new Bukkit_v1_21();
82+
ADAPTER = new Bukkit_v1_21();
7183
break;
7284
}
7385
}
7486

87+
// -------------------- Basic data conversion methods --------------------
88+
7589
@Override
7690
public String parseLegacyName(String name) {
7791
return name;
@@ -82,6 +96,8 @@ public int getLegacyBlockId(Material material) {
8296
return -1;
8397
}
8498

99+
// -------------------- Entity methods --------------------
100+
85101
@Override
86102
public boolean getEntityMeta(LivingEntity entity, List<Object> info) {
87103
return false;
@@ -92,6 +108,18 @@ public boolean setEntityMeta(Entity entity, Object value, int count) {
92108
return false;
93109
}
94110

111+
@Override
112+
public EntityType getEntityType(Material material) {
113+
switch (material) {
114+
case END_CRYSTAL:
115+
return EntityType.valueOf("ENDER_CRYSTAL");
116+
default:
117+
return EntityType.UNKNOWN;
118+
}
119+
}
120+
121+
// -------------------- Item handling methods --------------------
122+
95123
@Override
96124
public boolean getItemMeta(ItemMeta itemMeta, List<Map<String, Object>> list, List<List<Map<String, Object>>> metadata, int slot) {
97125
return false;
@@ -102,6 +130,45 @@ public boolean setItemMeta(Material rowType, ItemStack itemstack, List<Map<Strin
102130
return false;
103131
}
104132

133+
@Override
134+
public Material getPlantSeeds(Material material) {
135+
switch (material) {
136+
case WHEAT:
137+
return Material.WHEAT_SEEDS;
138+
case PUMPKIN_STEM:
139+
return Material.PUMPKIN_SEEDS;
140+
case MELON_STEM:
141+
return Material.MELON_SEEDS;
142+
case BEETROOTS:
143+
return Material.BEETROOT_SEEDS;
144+
default:
145+
return material;
146+
}
147+
}
148+
149+
@Override
150+
public ItemStack adjustIngredient(MerchantRecipe recipe, ItemStack itemStack) {
151+
return null;
152+
}
153+
154+
@Override
155+
public ItemStack getArrowMeta(Arrow arrow, ItemStack itemStack) {
156+
PotionData data = arrow.getBasePotionData();
157+
if (data.getType() != PotionType.valueOf("UNCRAFTABLE")) {
158+
itemStack = new ItemStack(Material.TIPPED_ARROW);
159+
PotionMeta meta = (PotionMeta) itemStack.getItemMeta();
160+
meta.setBasePotionData(data);
161+
for (PotionEffect effect : arrow.getCustomEffects()) {
162+
meta.addCustomEffect(effect, false);
163+
}
164+
itemStack.setItemMeta(meta);
165+
}
166+
167+
return itemStack;
168+
}
169+
170+
// -------------------- Block methods --------------------
171+
105172
@Override
106173
public boolean isAttached(Block block, Block scanBlock, BlockData blockData, int scanMin) {
107174
if (blockData instanceof Directional && blockData instanceof FaceAttachable) {
@@ -139,9 +206,16 @@ public Material getBucketContents(Material material) {
139206
return Material.AIR;
140207
}
141208

209+
@Override
210+
public boolean isInvisible(Material material) {
211+
return BlockUtils.isAir(material);
212+
}
213+
214+
// -------------------- Special block type checkers --------------------
215+
142216
@Override
143217
public boolean isItemFrame(Material material) {
144-
return (material == Material.ITEM_FRAME);
218+
return material == Material.ITEM_FRAME;
145219
}
146220

147221
@Override
@@ -159,75 +233,6 @@ public Class<?> getFrameClass(Material material) {
159233
return ItemFrame.class;
160234
}
161235

162-
@Override
163-
public boolean isGlowing(Sign sign, boolean isFront) {
164-
return false;
165-
}
166-
167-
@Override
168-
public boolean isWaxed(Sign sign) {
169-
return false;
170-
}
171-
172-
@Override
173-
public boolean isInvisible(Material material) {
174-
return BlockUtils.isAir(material);
175-
}
176-
177-
@Override
178-
public ItemStack adjustIngredient(MerchantRecipe recipe, ItemStack itemStack) {
179-
return null;
180-
}
181-
182-
@Override
183-
public void setGlowing(Sign sign, boolean isFront, boolean isGlowing) {
184-
return;
185-
}
186-
187-
@Override
188-
public void setColor(Sign sign, boolean isFront, int color) {
189-
if (!isFront) {
190-
return;
191-
}
192-
193-
sign.setColor(DyeColor.getByColor(Color.fromRGB(color)));
194-
}
195-
196-
@Override
197-
public void setWaxed(Sign sign, boolean isWaxed) {
198-
return;
199-
}
200-
201-
@Override
202-
public int getColor(Sign sign, boolean isFront) {
203-
if (isFront) {
204-
return sign.getColor().getColor().asRGB();
205-
}
206-
207-
return 0;
208-
}
209-
210-
@Override
211-
public Material getPlantSeeds(Material material) {
212-
switch (material) {
213-
case WHEAT:
214-
material = Material.WHEAT_SEEDS;
215-
break;
216-
case PUMPKIN_STEM:
217-
material = Material.PUMPKIN_SEEDS;
218-
break;
219-
case MELON_STEM:
220-
material = Material.MELON_SEEDS;
221-
break;
222-
case BEETROOTS:
223-
material = Material.BEETROOT_SEEDS;
224-
break;
225-
default:
226-
}
227-
228-
return material;
229-
}
230-
231236
@Override
232237
public boolean isDecoratedPot(Material material) {
233238
return false;
@@ -258,6 +263,8 @@ public ItemStack getChiseledBookshelfBook(BlockState blockState, PlayerInteractE
258263
return null;
259264
}
260265

266+
// -------------------- Sign handling methods --------------------
267+
261268
@Override
262269
public String getLine(Sign sign, int line) {
263270
if (line < 4) {
@@ -285,31 +292,45 @@ public boolean isSignFront(SignChangeEvent event) {
285292
}
286293

287294
@Override
288-
public ItemStack getArrowMeta(Arrow arrow, ItemStack itemStack) {
289-
PotionData data = arrow.getBasePotionData();
290-
if (data.getType() != PotionType.valueOf("UNCRAFTABLE")) {
291-
itemStack = new ItemStack(Material.TIPPED_ARROW);
292-
PotionMeta meta = (PotionMeta) itemStack.getItemMeta();
293-
meta.setBasePotionData(data);
294-
for (PotionEffect effect : arrow.getCustomEffects()) {
295-
meta.addCustomEffect(effect, false);
296-
}
297-
itemStack.setItemMeta(meta);
295+
public boolean isGlowing(Sign sign, boolean isFront) {
296+
return false;
297+
}
298+
299+
@Override
300+
public boolean isWaxed(Sign sign) {
301+
return false;
302+
}
303+
304+
@Override
305+
public void setGlowing(Sign sign, boolean isFront, boolean isGlowing) {
306+
// Base implementation does nothing
307+
}
308+
309+
@Override
310+
public void setColor(Sign sign, boolean isFront, int color) {
311+
if (!isFront) {
312+
return;
298313
}
299314

300-
return itemStack;
315+
sign.setColor(DyeColor.getByColor(Color.fromRGB(color)));
301316
}
302317

303318
@Override
304-
public EntityType getEntityType(Material material) {
305-
switch (material) {
306-
case END_CRYSTAL:
307-
return EntityType.valueOf("ENDER_CRYSTAL");
308-
default:
309-
return EntityType.UNKNOWN;
319+
public void setWaxed(Sign sign, boolean isWaxed) {
320+
// Base implementation does nothing
321+
}
322+
323+
@Override
324+
public int getColor(Sign sign, boolean isFront) {
325+
if (isFront) {
326+
return sign.getColor().getColor().asRGB();
310327
}
328+
329+
return 0;
311330
}
312331

332+
// -------------------- Registry methods --------------------
333+
313334
@Override
314335
public Object getRegistryKey(Object value) {
315336
return value;
@@ -319,5 +340,4 @@ public Object getRegistryKey(Object value) {
319340
public Object getRegistryValue(String key, Object tClass) {
320341
return null;
321342
}
322-
323343
}

0 commit comments

Comments
 (0)