diff --git a/API.md b/API.md index d26871a..8105c7d 100644 --- a/API.md +++ b/API.md @@ -8,7 +8,7 @@ } dependencies { modImplementation 'com.thebrokenrail:sorcerycraft:VERSION' - // VERSION = "+", for example "1.2.4+20w12a" + // VERSION = "+", for example "1.2.4+1.15.2" } ``` 2. Add Dependency to ```fabric.mod.json``` diff --git a/CHANGELOG.md b/CHANGELOG.md index e70af6e..aa8aa6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +**1.15.2 Port** +* Tweak Steadfast Spell + **1.2.9** * Fix Dedicated Server Crash diff --git a/README.md b/README.md index a0c8340..f50b3d6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # SorceryCraft +**1.15.2 Port** + Cast Spells in Minecraft! This mod currently supports the Minecraft 1.16 snapshots. diff --git a/build.gradle b/build.gradle index e07efa8..7919c7b 100644 --- a/build.gradle +++ b/build.gradle @@ -102,7 +102,7 @@ if (project.hasProperty('curseforge.api_key')) { apiKey = project.getProperty('curseforge.api_key') project { id = project.curseforge_id - changelog = 'A changelog can be found at https://gitea.thebrokenrail.com/TheBrokenRail/SorceryCraft/src/branch/master/CHANGELOG.md' + changelog = 'A changelog can be found at https://gitea.thebrokenrail.com/TheBrokenRail/SorceryCraft/src/branch/1.15/CHANGELOG.md' releaseType = 'release' addGameVersion project.simple_minecraft_version addGameVersion 'Fabric' diff --git a/gradle.properties b/gradle.properties index 4c1c02e..3f36124 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,11 +3,11 @@ org.gradle.jvmargs = -Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version = 20w18a + minecraft_version = 1.15.2 curseforge_id = 365308 - simple_minecraft_version = 1.16-Snapshot - yarn_build = 13 - fabric_loader_version = 0.8.2+build.194 + simple_minecraft_version = 1.15.2 + yarn_build = 15 + fabric_loader_version = 0.7.8+build.189 # Mod Properties mod_version = 1.2.9 @@ -16,7 +16,7 @@ org.gradle.jvmargs = -Xmx1G # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_api_version = 0.10.1+build.336-1.16 - cloth_config_version = 4.0.8-unstable - auto_config_version = 3.0.1-unstable - mod_menu_version = 1.11.2+build.6 + fabric_api_version = 0.5.1+build.294-1.15 + cloth_config_version = 2.13.4 + auto_config_version = 2.0.1 + mod_menu_version = 1.10.2+build.32 diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/SorceryCraft.java b/src/main/java/com/thebrokenrail/sorcerycraft/SorceryCraft.java index b9d884d..738ee11 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/SorceryCraft.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/SorceryCraft.java @@ -26,7 +26,7 @@ import net.minecraft.entity.EntityCategory; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.ProjectileEntity; +import net.minecraft.entity.projectile.Projectile; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; @@ -121,7 +121,7 @@ public class SorceryCraft implements ModInitializer { ContainerProviderRegistry.INSTANCE.registerFactory(new Identifier(NAMESPACE, "casting_table"), (syncId, identifier, player, buf) -> { final World world = player.world; final BlockPos pos = buf.readBlockPos(); - return Objects.requireNonNull(world.getBlockState(pos).createScreenHandlerFactory(player.world, pos)).createMenu(syncId, player.inventory, player); + return Objects.requireNonNull(world.getBlockState(pos).createContainerFactory(player.world, pos)).createMenu(syncId, player.inventory, player); }); CommandRegistry.INSTANCE.register(false, SpellCommand::register); @@ -142,7 +142,7 @@ public class SorceryCraft implements ModInitializer { DispenserBlock.registerBehavior(SorceryCraft.SPELL_ITEM, new ProjectileDispenserBehavior() { @Override - protected ProjectileEntity createProjectile(World position, Position stack, ItemStack itemStack) { + protected Projectile createProjectile(World position, Position stack, ItemStack itemStack) { SpellEntity entity = new SpellEntity(position, stack.getX(), stack.getY(), stack.getZ()); entity.setItem(itemStack); return entity; diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/advancement/CreateSpellCriterion.java b/src/main/java/com/thebrokenrail/sorcerycraft/advancement/CreateSpellCriterion.java index 8d60ca1..9900e81 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/advancement/CreateSpellCriterion.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/advancement/CreateSpellCriterion.java @@ -1,11 +1,10 @@ package com.thebrokenrail.sorcerycraft.advancement; +import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.thebrokenrail.sorcerycraft.SorceryCraft; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; -import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.EntityPredicate; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; @@ -15,23 +14,23 @@ public class CreateSpellCriterion extends AbstractCriterion true); + test(player.getAdvancementTracker(), (conditions) -> true); } public static class Conditions extends AbstractCriterionConditions { - public Conditions(EntityPredicate.Extended player) { - super(ID, player); + public Conditions() { + super(ID); } } } \ No newline at end of file diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/advancement/DiscoverAllSpellsCriterion.java b/src/main/java/com/thebrokenrail/sorcerycraft/advancement/DiscoverAllSpellsCriterion.java index 2c0b043..a65af69 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/advancement/DiscoverAllSpellsCriterion.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/advancement/DiscoverAllSpellsCriterion.java @@ -1,5 +1,6 @@ package com.thebrokenrail.sorcerycraft.advancement; +import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.thebrokenrail.sorcerycraft.SorceryCraft; import com.thebrokenrail.sorcerycraft.spell.api.Spell; @@ -7,8 +8,6 @@ import com.thebrokenrail.sorcerycraft.spell.api.registry.SpellRegistry; import com.thebrokenrail.sorcerycraft.spell.util.SpellPlayerEntity; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; -import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; -import net.minecraft.predicate.entity.EntityPredicate; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; @@ -26,12 +25,12 @@ public class DiscoverAllSpellsCriterion extends AbstractCriterion { + test(player.getAdvancementTracker(), (conditions) -> { SpellPlayerEntity spellPlayer = (SpellPlayerEntity) player; Map spells = spellPlayer.getDiscoveredSpells(); Spell[] maxSpells = SpellRegistry.getMaxSpells(); @@ -47,8 +46,8 @@ public class DiscoverAllSpellsCriterion extends AbstractCriterion { + public NameableContainerFactory createContainerFactory(BlockState state, World world, BlockPos pos) { + return new SimpleNamedContainerFactory((i, playerInventory, playerEntity) -> { if (!playerEntity.getEntityWorld().isClient()) { ((SpellServerPlayerEntity) playerEntity).sync(); } - return new CastingTableScreenHandler(i, playerInventory, ScreenHandlerContext.create(world, pos)); + return new CastingTableScreenHandler(i, playerInventory, BlockContext.create(world, pos)); }, new TranslatableText("container." + SorceryCraft.NAMESPACE + ".casting_table")); } } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/client/SorceryCraftClient.java b/src/main/java/com/thebrokenrail/sorcerycraft/client/SorceryCraftClient.java index 81a0d5d..bcc3520 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/client/SorceryCraftClient.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/client/SorceryCraftClient.java @@ -17,7 +17,6 @@ import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.screen.ScreenProviderRegistry; import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl; import net.minecraft.client.MinecraftClient; -import net.minecraft.text.LiteralText; import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; @@ -32,7 +31,7 @@ public class SorceryCraftClient implements ClientModInitializer { GuiRegistry guiRegistry = AutoConfig.getGuiRegistry(ModConfig.class); guiRegistry.registerAnnotationProvider((s, field, config, defaults, guiRegistryAccess) -> { ModConfig.UsePercentage bounds = field.getAnnotation(ModConfig.UsePercentage.class); - return Collections.singletonList(ConfigEntryBuilder.create().startIntSlider(new LiteralText(s), MathHelper.ceil(Utils.getUnsafely(field, config, 0.0) * 100), MathHelper.ceil(bounds.min() * 100), MathHelper.ceil(bounds.max() * 100)).setDefaultValue(() -> MathHelper.ceil((double) Utils.getUnsafely(field, defaults) * 100)).setSaveConsumer((newValue) -> Utils.setUnsafely(field, config, newValue / 100d)).setTextGetter(integer -> new LiteralText(String.format("%d%%", integer))).build()); + return Collections.singletonList(ConfigEntryBuilder.create().startIntSlider(s, MathHelper.ceil(Utils.getUnsafely(field, config, 0.0) * 100), MathHelper.ceil(bounds.min() * 100), MathHelper.ceil(bounds.max() * 100)).setDefaultValue(() -> MathHelper.ceil((double) Utils.getUnsafely(field, defaults) * 100)).setSaveConsumer((newValue) -> Utils.setUnsafely(field, config, newValue / 100d)).setTextGetter(integer -> String.format("%d%%", integer)).build()); }, field -> field.getType() == Double.TYPE || field.getType() == Double.class, ModConfig.UsePercentage.class); EntityRendererRegistry.INSTANCE.register(SorceryCraft.SPELL_ENTITY, (entityRenderDispatcher, context) -> new SpellEntityRenderer(entityRenderDispatcher)); diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/client/gui/CastingTableScreen.java b/src/main/java/com/thebrokenrail/sorcerycraft/client/gui/CastingTableScreen.java index 95f6b34..92f1503 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/client/gui/CastingTableScreen.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/client/gui/CastingTableScreen.java @@ -9,19 +9,17 @@ import com.thebrokenrail.sorcerycraft.spell.util.SpellHelper; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.gui.screen.ingame.ContainerScreen; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; -import net.minecraft.text.LiteralText; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; @Environment(EnvType.CLIENT) -public class CastingTableScreen extends HandledScreen { +public class CastingTableScreen extends ContainerScreen { private static final Identifier TEXTURE = new Identifier("textures/gui/container/villager2.png"); private int selectedIndex = 0; private int indexStartOffset = 0; @@ -29,17 +27,17 @@ public class CastingTableScreen extends HandledScreen public CastingTableScreen(CastingTableScreenHandler container, PlayerInventory inventory, Text title) { super(container, inventory, title); - backgroundWidth = 276; + containerWidth = 276; } @Override - protected void drawForeground(MatrixStack matrixStack, int i, int j) { - int titleY = backgroundHeight - 94; - textRenderer.draw(matrixStack, title, (float) (49 + this.backgroundWidth / 2 - textRenderer.getStringWidth(title) / 2), 6.0F, 4210752); - textRenderer.draw(matrixStack, playerInventory.getDisplayName(), 107.0F, (float) titleY, 4210752); - Text spells = new TranslatableText("container." + SorceryCraft.NAMESPACE + ".spells"); - textRenderer.draw(matrixStack, spells, (float) (5 - textRenderer.getStringWidth(spells) / 2 + 48), 6.0F, 4210752); - renderXPCost(matrixStack); + protected void drawForeground(int mouseX, int mouseY) { + int titleY = containerHeight - 94; + font.draw(title.asFormattedString(), (float) (49 + this.containerWidth / 2 - font.getStringWidth(title.asFormattedString()) / 2), 6.0F, 4210752); + font.draw(playerInventory.getDisplayName().asFormattedString(), 107.0F, (float) titleY, 4210752); + String spells = new TranslatableText("container." + SorceryCraft.NAMESPACE + ".spells").getString(); + font.draw(spells, (float) (5 - font.getStringWidth(spells) / 2 + 48), 6.0F, 4210752); + renderXPCost(); } public void resetIndex() { @@ -48,58 +46,58 @@ public class CastingTableScreen extends HandledScreen } @Override - protected void drawBackground(MatrixStack matrixStack, float delta, int mouseX, int mouseY) { + protected void drawBackground(float delta, int mouseX, int mouseY) { RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - assert client != null; - client.getTextureManager().bindTexture(TEXTURE); - int i = (width - backgroundWidth) / 2; - int j = (height - backgroundHeight) / 2; - drawTexture(matrixStack, i, j, getZOffset(), 0.0F, 0.0F, backgroundWidth, backgroundHeight, 256, 512); + assert minecraft != null; + minecraft.getTextureManager().bindTexture(TEXTURE); + int i = (width - containerWidth) / 2; + int j = (height - containerHeight) / 2; + blit(i, j, getBlitOffset(), 0.0F, 0.0F, containerWidth, containerHeight, 256, 512); } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float delta) { - renderBackground(matrixStack); - super.render(matrixStack, mouseX, mouseY, delta); - drawMouseoverTooltip(matrixStack, mouseX, mouseY); + public void render(int mouseX, int mouseY, float delta) { + renderBackground(); + super.render(mouseX, mouseY, delta); + drawMouseoverTooltip(mouseX, mouseY); - renderScrollbar(matrixStack); + renderScrollbar(); renderItems(); for (WidgetButtonPage button : buttons) { if (button.isHovered()) { - button.renderToolTip(matrixStack, mouseX, mouseY); + button.renderToolTip(mouseX, mouseY); } - button.visible = button.index < handler.getRecipes().length; + button.visible = button.index < container.getRecipes().length; if (button.visible) { - Spell spell = handler.getRecipes()[button.getIndex() + indexStartOffset]; - button.setMessage(SpellHelper.getTranslatedSpell(spell.getID(), spell.getLevel())); + Spell spell = container.getRecipes()[button.getIndex() + indexStartOffset]; + button.setMessage(SpellHelper.getTranslatedSpell(spell.getID(), spell.getLevel()).getString()); } } } - private void renderScrollbar(MatrixStack matrixStack) { - Spell[] spells = handler.getRecipes(); - assert client != null; - client.getTextureManager().bindTexture(TEXTURE); - int i = (width - backgroundWidth) / 2; - int j = (height - backgroundHeight) / 2; + private void renderScrollbar() { + Spell[] spells = container.getRecipes(); + assert minecraft != null; + minecraft.getTextureManager().bindTexture(TEXTURE); + int i = (width - containerWidth) / 2; + int j = (height - containerHeight) / 2; int k = spells.length - 7; if (k > 0) { int modifier = (int) (((float) indexStartOffset / k) * (1 + 139 - 27)); - drawTexture(matrixStack, i + 94, j + 18 + modifier, getZOffset(), 0.0F, 199.0F, 6, 27, 256, 512); + blit(i + 94, j + 18 + modifier, getBlitOffset(), 0.0F, 199.0F, 6, 27, 256, 512); } else { - drawTexture(matrixStack, i + 94, j + 18, getZOffset(), 6.0F, 199.0F, 6, 27, 256, 512); + blit(i + 94, j + 18, getBlitOffset(), 6.0F, 199.0F, 6, 27, 256, 512); } } private void renderItems() { - int i = (width - backgroundWidth) / 2; - int j = (height - backgroundHeight) / 2; + int i = (width - containerWidth) / 2; + int j = (height - containerHeight) / 2; int k = j + 16 + 1; - Spell[] spells = handler.getRecipes(); + Spell[] spells = container.getRecipes(); for (int x = 0; x < spells.length; x++) { if (!canScroll(spells.length) || (x >= indexStartOffset && x < 7 + indexStartOffset)) { ItemStack itemStack = spells[x].getItemCost(); @@ -107,28 +105,28 @@ public class CastingTableScreen extends HandledScreen int y = k + 2; itemRenderer.renderGuiItem(itemStack, i + 5 + 68, y); - itemRenderer.renderGuiItemOverlay(textRenderer, itemStack, i + 5 + 68, y); + itemRenderer.renderGuiItemOverlay(font, itemStack, i + 5 + 68, y); itemRenderer.zOffset = 0.0F; k += 20; } } } - private void renderXPCost(MatrixStack matrixStack) { - if (handler.getRecipes().length > 0) { - int cost = handler.getRecipes()[selectedIndex].getXPCost(); + private void renderXPCost() { + if (container.getRecipes().length > 0) { + int cost = container.getRecipes()[selectedIndex].getXPCost(); int color = 8453920; - assert client != null; - assert client.player != null; - Text string = new TranslatableText("container.repair.cost", cost); - if (!handler.canTakeResult(playerInventory.player)) { + assert minecraft != null; + assert minecraft.player != null; + String string = new TranslatableText("container.repair.cost", cost).getString(); + if (!container.canTakeResult(playerInventory.player)) { color = 16736352; } - int x2 = backgroundWidth - 8; - int x1 = x2 - textRenderer.getStringWidth(string); - fill(matrixStack, x1, 65, x2, 77, 1325400064); - textRenderer.drawWithShadow(matrixStack, string, (float) x1, 67.0F, color); + int x2 = containerWidth - 8; + int x1 = x2 - font.getStringWidth(string); + fill(x1, 65, x2, 77, 1325400064); + font.drawWithShadow(string, (float) x1, 67.0F, color); } } @@ -138,7 +136,7 @@ public class CastingTableScreen extends HandledScreen @Override public boolean mouseScrolled(double d, double e, double amount) { - int i = handler.getRecipes().length; + int i = container.getRecipes().length; if (canScroll(i)) { int j = i - 7; indexStartOffset = (int) ((double) indexStartOffset - amount); @@ -150,7 +148,7 @@ public class CastingTableScreen extends HandledScreen @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - int i = handler.getRecipes().length; + int i = container.getRecipes().length; if (scrolling) { int j = y + 18; int k = j + 139; @@ -167,9 +165,9 @@ public class CastingTableScreen extends HandledScreen @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { scrolling = false; - int i = (width - backgroundWidth) / 2; - int j = (height - backgroundHeight) / 2; - if (canScroll(handler.getRecipes().length) && mouseX > (double) (i + 94) && mouseX < (double) (i + 94 + 6) && mouseY > (double) (j + 18) && mouseY <= (double) (j + 18 + 139 + 1)) { + int i = (width - containerWidth) / 2; + int j = (height - containerHeight) / 2; + if (canScroll(container.getRecipes().length) && mouseX > (double) (i + 94) && mouseX < (double) (i + 94 + 6) && mouseY > (double) (j + 18) && mouseY <= (double) (j + 18 + 139 + 1)) { scrolling = true; } @@ -177,9 +175,9 @@ public class CastingTableScreen extends HandledScreen } private void syncRecipeIndex() { - handler.setIndex(selectedIndex); - assert client != null; - SelectSpellC2SPacket.send(client, selectedIndex); + container.setIndex(selectedIndex); + assert minecraft != null; + SelectSpellC2SPacket.send(minecraft, selectedIndex); } private final WidgetButtonPage[] buttons = new WidgetButtonPage[7]; @@ -187,8 +185,8 @@ public class CastingTableScreen extends HandledScreen @Override protected void init() { super.init(); - int i = (width - backgroundWidth) / 2; - int j = (height - backgroundHeight) / 2; + int i = (width - containerWidth) / 2; + int j = (height - containerHeight) / 2; int k = j + 16 + 2; for (int l = 0; l < 7; ++l) { @@ -205,33 +203,33 @@ public class CastingTableScreen extends HandledScreen final int index; public WidgetButtonPage(int i, int j, int k, PressAction pressAction) { - super(i, j, 89, 20, new LiteralText(""), pressAction); + super(i, j, 89, 20, "", pressAction); index = k; visible = false; } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float delta) { + public void render(int mouseX, int mouseY, float delta) { active = (index + CastingTableScreen.this.indexStartOffset) != CastingTableScreen.this.selectedIndex; - super.render(matrixStack, mouseX, mouseY, delta); + super.render(mouseX, mouseY, delta); } public int getIndex() { return this.index; } - public void renderToolTip(MatrixStack matrixStack, int mouseX, int mouseY) { - if (hovered && handler.getRecipes().length > index + indexStartOffset && mouseX > this.x + 65) { - ItemStack itemStack = handler.getRecipes()[index + indexStartOffset].getItemCost(); + public void renderToolTip(int mouseX, int mouseY) { + if (isHovered && container.getRecipes().length > index + indexStartOffset && mouseX > this.x + 65) { + ItemStack itemStack = container.getRecipes()[index + indexStartOffset].getItemCost(); if (!itemStack.isEmpty()) { - renderTooltip(matrixStack, itemStack, mouseX, mouseY); + renderTooltip(itemStack, mouseX, mouseY); } } } @Override - public void drawCenteredString(MatrixStack matrixStack, TextRenderer textRenderer, String str, int centerX, int y, int color) { - drawString(matrixStack, textRenderer, str, x + 5, y, color); + public void drawCenteredString(TextRenderer font, String str, int centerX, int y, int color) { + drawString(font, str, x + 5, y, color); } } } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/entity/SpellEntity.java b/src/main/java/com/thebrokenrail/sorcerycraft/entity/SpellEntity.java index 529aa2a..f72adb6 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/entity/SpellEntity.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/entity/SpellEntity.java @@ -9,7 +9,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.entity.projectile.thrown.ThrownItemEntity; +import net.minecraft.entity.thrown.ThrownItemEntity; import net.minecraft.item.Item; import net.minecraft.network.Packet; import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket; @@ -52,7 +52,6 @@ public class SpellEntity extends ThrownItemEntity { @Override protected void onCollision(HitResult hitResult) { - super.onCollision(hitResult); if (!getEntityWorld().isClient()) { Map spells = SpellHelper.getSpells(getItem()); if (!spells.containsKey(Spells.INWARD_SPELL)) { diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/gui/CastingTableScreenHandler.java b/src/main/java/com/thebrokenrail/sorcerycraft/gui/CastingTableScreenHandler.java index 755d456..470bf94 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/gui/CastingTableScreenHandler.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/gui/CastingTableScreenHandler.java @@ -5,16 +5,16 @@ import com.thebrokenrail.sorcerycraft.spell.api.Spell; import com.thebrokenrail.sorcerycraft.spell.util.SpellPlayerEntity; import com.thebrokenrail.sorcerycraft.spell.api.registry.SpellRegistry; import com.thebrokenrail.sorcerycraft.spell.util.SpellHelper; +import net.minecraft.container.BlockContext; +import net.minecraft.container.Container; +import net.minecraft.container.ContainerType; +import net.minecraft.container.Slot; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.BasicInventory; import net.minecraft.inventory.CraftingResultInventory; import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.screen.ScreenHandlerContext; -import net.minecraft.screen.ScreenHandlerType; -import net.minecraft.screen.slot.Slot; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPos; @@ -25,15 +25,15 @@ import java.util.List; import java.util.Map; import java.util.function.BiConsumer; -public class CastingTableScreenHandler extends ScreenHandler { +public class CastingTableScreenHandler extends Container { private final Inventory inventory; private final Inventory result; private Spell[] spells = new Spell[0]; - private final ScreenHandlerContext context; + private final BlockContext context; private int index = 0; - public CastingTableScreenHandler(int syncId, PlayerInventory playerInventory, ScreenHandlerContext blockContext) { - super(ScreenHandlerType.STONECUTTER, syncId); + public CastingTableScreenHandler(int syncId, PlayerInventory playerInventory, BlockContext blockContext) { + super(ContainerType.STONECUTTER, syncId); inventory = new BasicInventory(2) { public void markDirty() { @@ -91,8 +91,8 @@ public class CastingTableScreenHandler extends ScreenHandler { } }); - CastingTableScreenHandler.this.inventory.setStack(0, ItemStack.EMPTY); - CastingTableScreenHandler.this.inventory.removeStack(1, spells[index].getItemCost().getCount()); + CastingTableScreenHandler.this.inventory.setInvStack(0, ItemStack.EMPTY); + CastingTableScreenHandler.this.inventory.takeInvStack(1, spells[index].getItemCost().getCount()); return stack; } }); @@ -141,7 +141,7 @@ public class CastingTableScreenHandler extends ScreenHandler { this.index = index; onContentChanged(inventory); - if (inventory.getStack(0).isEmpty() && inventory.getStack(1).isEmpty()) { + if (inventory.getInvStack(0).isEmpty() && inventory.getInvStack(1).isEmpty()) { ItemStack spellItem = new ItemStack(SorceryCraft.SPELL_ITEM); autoFill(0, spellItem, true); ItemStack paymentItem = getRecipes()[index].getItemCost(); @@ -198,8 +198,8 @@ public class CastingTableScreenHandler extends ScreenHandler { @Override public void onContentChanged(Inventory inventory) { super.onContentChanged(inventory); - ItemStack item = inventory.getStack(0); - ItemStack cost = inventory.getStack(1); + ItemStack item = inventory.getInvStack(0); + ItemStack cost = inventory.getInvStack(1); if (inventory == this.inventory) { if (spells.length > 0 && !item.isEmpty() && @@ -211,9 +211,9 @@ public class CastingTableScreenHandler extends ScreenHandler { resultSpells.put(spells[index].getID(), spells[index].getLevel()); } SpellHelper.setSpells(resultItem, resultSpells); - result.setStack(2, resultItem); + result.setInvStack(2, resultItem); } else { - result.setStack(2, ItemStack.EMPTY); + result.setInvStack(2, ItemStack.EMPTY); } } } @@ -223,14 +223,14 @@ public class CastingTableScreenHandler extends ScreenHandler { for (int i = 3; i < 39; ++i) { ItemStack itemStack = slots.get(i).getStack(); if (!itemStack.isEmpty() && itemCompatible(stack, itemStack)) { - ItemStack invSlot = inventory.getStack(slot); + ItemStack invSlot = inventory.getInvStack(slot); int count = invSlot.isEmpty() ? 0 : invSlot.getCount(); int requiredCount = Math.min((onlyOne ? 1 : stack.getMaxCount()) - count, itemStack.getCount()); ItemStack modifiedItem = itemStack.copy(); int totalCount = count + requiredCount; itemStack.decrement(requiredCount); modifiedItem.setCount(totalCount); - inventory.setStack(slot, modifiedItem); + inventory.setInvStack(slot, modifiedItem); if (totalCount >= stack.getMaxCount() || onlyOne) { break; } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/item/SpellItem.java b/src/main/java/com/thebrokenrail/sorcerycraft/item/SpellItem.java index ee7deab..7758f22 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/item/SpellItem.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/item/SpellItem.java @@ -14,11 +14,11 @@ import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; +import net.minecraft.util.DefaultedList; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.Rarity; import net.minecraft.util.TypedActionResult; -import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; import java.util.HashMap; @@ -97,7 +97,7 @@ public class SpellItem extends Item { super.inventoryTick(stack, world, entity, slot, selected); if (!world.isClient() && entity instanceof PlayerEntity) { PlayerEntity player = (PlayerEntity) entity; - Map itemSpells = SpellHelper.getSpells(player.inventory.getStack(slot)); + Map itemSpells = SpellHelper.getSpells(player.inventory.getInvStack(slot)); SpellHelper.learnSpells(player, itemSpells); } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/mixin/CriteriaRegistryHook.java b/src/main/java/com/thebrokenrail/sorcerycraft/mixin/CriteriaRegistryHook.java index 10227b1..3a84b1a 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/mixin/CriteriaRegistryHook.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/mixin/CriteriaRegistryHook.java @@ -1,11 +1,11 @@ package com.thebrokenrail.sorcerycraft.mixin; -import net.minecraft.advancement.criterion.Criteria; import net.minecraft.advancement.criterion.Criterion; +import net.minecraft.advancement.criterion.Criterions; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; -@Mixin(Criteria.class) +@Mixin(Criterions.class) public interface CriteriaRegistryHook { @Invoker("register") static > T callRegister(T criterion) { diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinPlayerEntity.java b/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinPlayerEntity.java index 1fcb71c..899046b 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinPlayerEntity.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinPlayerEntity.java @@ -3,9 +3,9 @@ package com.thebrokenrail.sorcerycraft.mixin; import com.thebrokenrail.sorcerycraft.gui.CastingTableScreenHandler; import com.thebrokenrail.sorcerycraft.spell.util.SpellHelper; import com.thebrokenrail.sorcerycraft.spell.util.SpellPlayerEntity; +import net.minecraft.container.Container; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.CompoundTag; -import net.minecraft.screen.ScreenHandler; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -21,7 +21,7 @@ import java.util.Map; @Mixin(PlayerEntity.class) public class MixinPlayerEntity implements SpellPlayerEntity { @Shadow - public ScreenHandler currentScreenHandler; + public Container container; @Unique private Map discoveredSpells = new HashMap<>(); @@ -38,9 +38,9 @@ public class MixinPlayerEntity implements SpellPlayerEntity { @Override public void setDiscoveredSpells(Map spells) { discoveredSpells = spells; - if (currentScreenHandler instanceof CastingTableScreenHandler) { + if (container instanceof CastingTableScreenHandler) { //noinspection ConstantConditions - ((CastingTableScreenHandler) currentScreenHandler).setSpells((PlayerEntity) (Object) this); + ((CastingTableScreenHandler) container).setSpells((PlayerEntity) (Object) this); } } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinServerPlayerEntity.java b/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinServerPlayerEntity.java index 21d6556..358d2eb 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinServerPlayerEntity.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/mixin/MixinServerPlayerEntity.java @@ -18,7 +18,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Map; @SuppressWarnings("unused") -@Environment(EnvType.SERVER) @Mixin(ServerPlayerEntity.class) public abstract class MixinServerPlayerEntity extends MixinPlayerEntity implements SpellServerPlayerEntity { @Inject(at = @At("HEAD"), method = "copyFrom") @@ -32,7 +31,7 @@ public abstract class MixinServerPlayerEntity extends MixinPlayerEntity implemen @Override public void setDiscoveredSpells(Map spells) { super.setDiscoveredSpells(spells); - if (currentScreenHandler instanceof CastingTableScreenHandler) { + if (container instanceof CastingTableScreenHandler) { sync(); } } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/packet/SelectSpellC2SPacket.java b/src/main/java/com/thebrokenrail/sorcerycraft/packet/SelectSpellC2SPacket.java index e47f772..e2b25b2 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/packet/SelectSpellC2SPacket.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/packet/SelectSpellC2SPacket.java @@ -7,15 +7,15 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.network.PacketContext; import net.minecraft.client.MinecraftClient; -import net.minecraft.network.PacketByteBuf; +import net.minecraft.container.Container; import net.minecraft.network.packet.c2s.play.CustomPayloadC2SPacket; -import net.minecraft.screen.ScreenHandler; import net.minecraft.util.Identifier; +import net.minecraft.util.PacketByteBuf; public class SelectSpellC2SPacket { public static void handle(PacketContext context, PacketByteBuf bytes) { int index = bytes.readInt(); - ScreenHandler handler = context.getPlayer().currentScreenHandler; + Container handler = context.getPlayer().container; if (handler instanceof CastingTableScreenHandler) { CastingTableScreenHandler merchantContainer = (CastingTableScreenHandler) handler; merchantContainer.setIndex(index); diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/packet/UpdateKnownSpellsS2CPacket.java b/src/main/java/com/thebrokenrail/sorcerycraft/packet/UpdateKnownSpellsS2CPacket.java index 66a88c7..1e79b47 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/packet/UpdateKnownSpellsS2CPacket.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/packet/UpdateKnownSpellsS2CPacket.java @@ -1,6 +1,7 @@ package com.thebrokenrail.sorcerycraft.packet; import com.thebrokenrail.sorcerycraft.SorceryCraft; +import com.thebrokenrail.sorcerycraft.gui.CastingTableScreenHandler; import com.thebrokenrail.sorcerycraft.spell.util.SpellPlayerEntity; import com.thebrokenrail.sorcerycraft.spell.util.SpellHelper; import io.netty.buffer.Unpooled; @@ -8,10 +9,10 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.network.PacketContext; import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.PacketByteBuf; import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; +import net.minecraft.util.PacketByteBuf; public class UpdateKnownSpellsS2CPacket { @Environment(EnvType.CLIENT) @@ -20,6 +21,9 @@ public class UpdateKnownSpellsS2CPacket { if (context.getPlayer() != null) { SpellPlayerEntity spellPlayer = (SpellPlayerEntity) context.getPlayer(); spellPlayer.setDiscoveredSpells(SpellHelper.getSpells(tag)); + if (context.getPlayer().container instanceof CastingTableScreenHandler) { + ((CastingTableScreenHandler) context.getPlayer().container).setSpells(context.getPlayer()); + } } } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/spell/CoolingSpell.java b/src/main/java/com/thebrokenrail/sorcerycraft/spell/CoolingSpell.java index 13a7742..b4938f1 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/spell/CoolingSpell.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/spell/CoolingSpell.java @@ -1,11 +1,12 @@ package com.thebrokenrail.sorcerycraft.spell; import com.thebrokenrail.sorcerycraft.spell.api.Spell; +import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.state.property.Properties; -import net.minecraft.tag.BlockTags; +import net.minecraft.state.property.Properties; import net.minecraft.util.Identifier; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; @@ -24,7 +25,7 @@ public class CoolingSpell extends Spell { @Override public void execute(World world, Entity source, Entity attacker, BlockHitResult hitResult) { BlockPos blockPos = hitResult.getBlockPos(); - if (world.getBlockState(blockPos).isIn(BlockTags.FIRE)) { + if (world.getBlockState(blockPos).getBlock() == Blocks.FIRE) { world.removeBlock(blockPos, false); } if (world.getBlockState(blockPos).contains(Properties.LIT) && world.getBlockState(blockPos).get(Properties.LIT)) { @@ -32,7 +33,7 @@ public class CoolingSpell extends Spell { } BlockPos sideBlockPos = blockPos.offset(hitResult.getSide()); - if (world.getBlockState(sideBlockPos).isIn(BlockTags.FIRE)) { + if (world.getBlockState(sideBlockPos).getBlock() == Blocks.FIRE) { world.removeBlock(sideBlockPos, false); } } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/spell/FlameSpell.java b/src/main/java/com/thebrokenrail/sorcerycraft/spell/FlameSpell.java index 3597eef..42d4856 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/spell/FlameSpell.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/spell/FlameSpell.java @@ -1,8 +1,9 @@ package com.thebrokenrail.sorcerycraft.spell; import com.thebrokenrail.sorcerycraft.spell.api.Spell; -import net.minecraft.block.AbstractFireBlock; import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.FireBlock; import net.minecraft.block.TntBlock; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; @@ -40,7 +41,7 @@ public class FlameSpell extends Spell { TntBlock.primeTnt(world, blockPos); world.removeBlock(blockPos, false); } else if (FlintAndSteelItem.canIgnite(sideBlockState, world, sideBlockPos)) { - world.setBlockState(sideBlockPos, AbstractFireBlock.getState(world, sideBlockPos)); + world.setBlockState(sideBlockPos, ((FireBlock) Blocks.FIRE).getStateForPosition(world, sideBlockPos)); } else if (FlintAndSteelItem.isIgnitable(blockState)) { world.setBlockState(blockPos, blockState.with(Properties.LIT, true)); } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/spell/SteadfastSpell.java b/src/main/java/com/thebrokenrail/sorcerycraft/spell/SteadfastSpell.java index be0e162..fa7f294 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/spell/SteadfastSpell.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/spell/SteadfastSpell.java @@ -17,7 +17,7 @@ public class SteadfastSpell extends Spell { @Override public ItemStack getItemCost() { - return new ItemStack(Items.NETHERITE_INGOT); + return new ItemStack(Items.DIAMOND); } @Override diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/spell/api/Spell.java b/src/main/java/com/thebrokenrail/sorcerycraft/spell/api/Spell.java index bfc4622..117ba7f 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/spell/api/Spell.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/spell/api/Spell.java @@ -3,7 +3,7 @@ package com.thebrokenrail.sorcerycraft.spell.api; import com.thebrokenrail.sorcerycraft.spell.api.registry.SpellRegistry; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; -import net.minecraft.text.MutableText; +import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; import net.minecraft.util.hit.BlockHitResult; @@ -83,8 +83,8 @@ public abstract class Spell { * @param level Spell Level * @return Translated Display Name */ - public static MutableText getDefaultTranslation(Identifier id, int level) { - MutableText text = new TranslatableText("spell." + id.getNamespace() + '.' + id.getPath()); + public static Text getDefaultTranslation(Identifier id, int level) { + Text text = new TranslatableText("spell." + id.getNamespace() + '.' + id.getPath()); if (level != 0 || SpellRegistry.getMaxLevel(id) != 1) { text.append(" ").append(new TranslatableText("enchantment.level." + (level + 1))); } @@ -95,7 +95,7 @@ public abstract class Spell { * Get Translated Display Name * @return Translated Display Name */ - public MutableText getTranslation() { + public Text getTranslation() { return getDefaultTranslation(getID(), getLevel()); } } diff --git a/src/main/java/com/thebrokenrail/sorcerycraft/spell/util/SpellHelper.java b/src/main/java/com/thebrokenrail/sorcerycraft/spell/util/SpellHelper.java index 32ca298..484c5c1 100644 --- a/src/main/java/com/thebrokenrail/sorcerycraft/spell/util/SpellHelper.java +++ b/src/main/java/com/thebrokenrail/sorcerycraft/spell/util/SpellHelper.java @@ -10,7 +10,6 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.LiteralText; -import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; @@ -86,7 +85,7 @@ public class SpellHelper { public static Text getTranslatedSpell(Identifier id, int level) { Spell spell = SpellRegistry.getSpell(id, level); - MutableText text; + Text text; if (spell != null) { text = spell.getTranslation(); } else { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 8553a83..a6cc3ae 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,6 +32,6 @@ "depends": { "fabricloader": ">=0.7.4", "fabric": "*", - "minecraft": "1.16.x" + "minecraft": "1.15.x" } }