Skip to content

Commit 976ba3c

Browse files
committed
5.0 part 7: the final touches
1 parent 0ae2785 commit 976ba3c

File tree

14 files changed

+92
-61
lines changed

14 files changed

+92
-61
lines changed

src/main/java/embin/poosmp/PooSMPMod.java

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import embin.poosmp.villager.PooSMPVillagers;
1717
import net.fabricmc.api.ModInitializer;
1818

19-
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
2019
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
2120
import net.fabricmc.fabric.api.event.registry.DynamicRegistries;
2221
import net.fabricmc.fabric.api.item.v1.DefaultItemComponentEvents;
@@ -37,7 +36,6 @@
3736
import net.minecraft.registry.*;
3837
import net.minecraft.registry.entry.RegistryEntry;
3938
import net.minecraft.text.Text;
40-
import net.minecraft.util.Formatting;
4139
import net.minecraft.util.Identifier;
4240
import org.slf4j.Logger;
4341
import org.slf4j.LoggerFactory;
@@ -330,36 +328,6 @@ public void onInitialize() {
330328
DefaultItemComponentEvents.MODIFY.register(Id.of("poosmp:set_item_prices"), ItemWorth::setPrices);
331329
}
332330

333-
ItemTooltipCallback.EVENT.register(
334-
Id.of("poosmp:adjust_tooltip"),
335-
(itemStack, tooltipContext, tooltipType, list) -> {
336-
if (tooltipType.isAdvanced()) {
337-
Text disabledText = Text.translatable("item.disabled").formatted(Formatting.RED);
338-
boolean wasDisabled = false; // cant actually check if item is disabled in this callback
339-
if (list.getLast().equals(disabledText)) {
340-
list.removeLast();
341-
wasDisabled = true;
342-
}
343-
if (!itemStack.getComponents().isEmpty()) {
344-
list.removeLast();
345-
}
346-
list.removeLast();
347-
if (itemStack.contains(PooSMPItemComponents.ITEM_VALUE)) {
348-
itemStack.get(PooSMPItemComponents.ITEM_VALUE).appendTooltip(tooltipContext, list::add, tooltipType);
349-
}
350-
Identifier displayedId = itemStack.getOrDefault(PooSMPItemComponents.DISPLAYED_ID, Registries.ITEM.getId(itemStack.getItem()));
351-
boolean hasComponent = itemStack.contains(PooSMPItemComponents.DISPLAYED_ID);
352-
list.add(Text.literal(displayedId.toString()).formatted(hasComponent ? Formatting.DARK_GRAY : Formatting.RED));
353-
if (!itemStack.getComponents().isEmpty()) {
354-
list.add(Text.translatable("item.components", itemStack.getComponents().size()).formatted(Formatting.DARK_GRAY));
355-
}
356-
if (wasDisabled) {
357-
list.add(disabledText);
358-
}
359-
}
360-
}
361-
);
362-
363331
LOGGER.info("im all pooped up");
364332
}
365333
}

src/main/java/embin/poosmp/client/PooSMPModClient.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import embin.poosmp.client.screen.shop.ShopScreenOld;
55
import embin.poosmp.client.screen.shop.ShopScreenHandler;
66
import embin.poosmp.client.screen.upgrade.UpgradesScreen;
7+
import embin.poosmp.items.component.PooSMPItemComponents;
78
import embin.poosmp.networking.PooSMPMessages;
89
import embin.poosmp.util.Id;
910
import net.fabricmc.api.ClientModInitializer;
@@ -12,6 +13,7 @@
1213
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
1314
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
1415
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
16+
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
1517
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
1618
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
1719
import net.minecraft.block.Blocks;
@@ -23,7 +25,10 @@
2325
import net.minecraft.entity.attribute.EntityAttributeInstance;
2426
import net.minecraft.entity.attribute.EntityAttributeModifier;
2527
import net.minecraft.entity.player.PlayerInventory;
28+
import net.minecraft.registry.Registries;
2629
import net.minecraft.text.Text;
30+
import net.minecraft.util.Formatting;
31+
import net.minecraft.util.Identifier;
2732
import net.minecraft.world.biome.GrassColors;
2833
import org.lwjgl.glfw.GLFW;
2934
import org.slf4j.Logger;
@@ -108,6 +113,36 @@ public void onInitializeClient() {
108113
PooSMPBlocks.FAKE_GRASS_BLOCK
109114
);
110115

116+
ItemTooltipCallback.EVENT.register(
117+
Id.of("poosmp:adjust_tooltip"),
118+
(itemStack, tooltipContext, tooltipType, list) -> {
119+
if (tooltipType.isAdvanced()) {
120+
Text disabledText = Text.translatable("item.disabled").formatted(Formatting.RED);
121+
boolean wasDisabled = false; // cant actually check if item is disabled in this callback
122+
if (list.getLast().equals(disabledText)) {
123+
list.removeLast();
124+
wasDisabled = true;
125+
}
126+
if (!itemStack.getComponents().isEmpty()) {
127+
list.removeLast();
128+
}
129+
list.removeLast();
130+
if (itemStack.contains(PooSMPItemComponents.ITEM_VALUE)) {
131+
itemStack.get(PooSMPItemComponents.ITEM_VALUE).appendTooltip(tooltipContext, list::add, tooltipType);
132+
}
133+
Identifier displayedId = itemStack.getOrDefault(PooSMPItemComponents.DISPLAYED_ID, Registries.ITEM.getId(itemStack.getItem()));
134+
boolean hasComponent = itemStack.contains(PooSMPItemComponents.DISPLAYED_ID);
135+
list.add(Text.literal(displayedId.toString()).formatted(hasComponent ? Formatting.DARK_GRAY : Formatting.RED));
136+
if (!itemStack.getComponents().isEmpty()) {
137+
list.add(Text.translatable("item.components", itemStack.getComponents().size()).formatted(Formatting.DARK_GRAY));
138+
}
139+
if (wasDisabled) {
140+
list.add(disabledText);
141+
}
142+
}
143+
}
144+
);
145+
111146
PooSMPMessages.registerS2CPackets();
112147
}
113148
}

src/main/java/embin/poosmp/client/screen/upgrade/UpgradesListWidget.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,8 +136,8 @@ public void render(DrawContext context, int index, int y, int x, int entryWidth,
136136
} else {
137137
this.sellButton.setTooltip(null);
138138
}
139-
if (!canBeBought(this.upgrade, upgradeRegistry)) {
140-
this.buyButton.setTooltip(Tooltip.of(Text.literal("Out of stock!")));
139+
if (!canBeBought(this.upgrade, upgradeRegistry, this.player)) {
140+
this.buyButton.setTooltip(Tooltip.of(Text.literal("Out of stock or insufficient xp level!")));
141141
} else if (this.upgrade.max_purchases().isPresent()){
142142
String tooltip = String.format("%s/%s", amountPurchased, this.upgrade.max_purchases().get());
143143
this.buyButton.setTooltip(Tooltip.of(Text.literal(tooltip)));
@@ -165,13 +165,17 @@ protected static boolean canBeSold(Upgrade upgrade, Registry<Upgrade> upgradeReg
165165
return upgrade.can_be_sold();
166166
}
167167

168-
protected static boolean canBeBought(Upgrade upgrade, Registry<Upgrade> upgradeRegistry) {
168+
// client side check :trollface:
169+
protected static boolean canBeBought(Upgrade upgrade, Registry<Upgrade> upgradeRegistry, PlayerEntity player) {
170+
int amountPurchased = ClientUpgradeData.INSTANCE.getPurchasedAmount(upgrade, upgradeRegistry);
171+
int upgradePrice = PriceObject.getCurrentPrice(upgrade, player, amountPurchased);
172+
if (player.experienceLevel < upgradePrice) return false;
169173
return ClientUpgradeData.INSTANCE.getPurchasedAmount(upgrade, upgradeRegistry) < upgrade.maxPurchases();
170174
}
171175

172176
protected void update() {
173177
this.sellButton.active = canBeSold(this.upgrade, upgradeRegistry) && this.ticksSincePurchase >= 120;
174-
this.buyButton.active = canBeBought(this.upgrade, upgradeRegistry) && this.ticksSincePurchase >= 120;
178+
this.buyButton.active = canBeBought(this.upgrade, upgradeRegistry, this.player) && this.ticksSincePurchase >= 120;
175179
this.ticksSincePurchase++;
176180
//this.text.setCentered(true);
177181
//this.text.setTextColor(Colors.BLACK);

src/main/java/embin/poosmp/networking/PooSMPMessages.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import embin.poosmp.networking.payload.BuyUpgradePayload;
66
import embin.poosmp.networking.payload.SellUpgradePayload;
77
import embin.poosmp.networking.payload.UpgradeSyncPayload;
8+
import embin.poosmp.upgrade.PriceObject;
89
import embin.poosmp.upgrade.ServerUpgradeData;
910
import embin.poosmp.upgrade.Upgrade;
1011
import embin.poosmp.util.Id;
@@ -14,6 +15,7 @@
1415
import net.minecraft.registry.Registry;
1516
import net.minecraft.registry.entry.RegistryEntry;
1617
import net.minecraft.server.MinecraftServer;
18+
import net.minecraft.server.network.ServerPlayerEntity;
1719
import net.minecraft.sound.SoundCategory;
1820
import net.minecraft.sound.SoundEvents;
1921
import net.minecraft.text.Text;
@@ -34,19 +36,20 @@ public static void register() {
3436

3537
public static void registerC2SPackets() {
3638
ServerPlayNetworking.registerGlobalReceiver(BuyUpgradePayload.ID, (payload, context) -> {
37-
MinecraftServer server = context.player().getServer();
39+
ServerPlayerEntity player = context.player();
40+
MinecraftServer server = player.getServer();
3841

39-
if (server != null && !context.player().getWorld().isClient()) {
42+
if (server != null && !player.getWorld().isClient()) {
4043
server.execute(() -> {
4144
Registry<Upgrade> upgradeRegistry = server.getRegistryManager().get(PooSMPRegistries.Keys.UPGRADE);
4245
if (upgradeRegistry.getEntry(payload.upgrade()).isPresent()) {
4346
RegistryEntry<Upgrade> upgrade = upgradeRegistry.getEntry(payload.upgrade()).get();
44-
int currentPurchasedAmount = ServerUpgradeData.INSTANCE.getPurchasedAmount(context.player(), upgrade.value());
45-
ServerUpgradeData.INSTANCE.setPurchasedAmount(context.player(), upgrade.value(), currentPurchasedAmount + 1);
46-
upgrade.value().onPurchase(context.player());
47-
context.player().getServerWorld().playSound(null, context.player().getBlockPos(), SoundEvents.ENTITY_ARROW_HIT_PLAYER, SoundCategory.PLAYERS);
48-
Upgrade.syncData(context.player());
49-
server.sendMessage(Text.literal("Bought upgrade"));
47+
int currentPurchasedAmount = ServerUpgradeData.INSTANCE.getPurchasedAmount(player, upgrade.value());
48+
player.setExperienceLevel(player.experienceLevel - PriceObject.getCurrentPrice(upgrade.value(), player, currentPurchasedAmount));
49+
ServerUpgradeData.INSTANCE.setPurchasedAmount(player, upgrade.value(), currentPurchasedAmount + 1);
50+
upgrade.value().onPurchase(player);
51+
player.getServerWorld().playSound(null, player.getBlockPos(), SoundEvents.ENTITY_ARROW_HIT_PLAYER, SoundCategory.PLAYERS);
52+
Upgrade.syncData(player);
5053
} else {
5154
server.sendMessage(Text.literal("Invalid upgrade").formatted(Formatting.RED));
5255
}
@@ -55,17 +58,19 @@ public static void registerC2SPackets() {
5558
});
5659

5760
ServerPlayNetworking.registerGlobalReceiver(SellUpgradePayload.ID, (payload, context) -> {
58-
MinecraftServer server = context.player().getServer();
61+
ServerPlayerEntity player = context.player();
62+
MinecraftServer server = player.getServer();
5963

60-
if (server != null && !context.player().getWorld().isClient()) {
64+
if (server != null && !player.getWorld().isClient()) {
6165
server.execute(() -> {
6266
Registry<Upgrade> upgradeRegistry = server.getRegistryManager().get(PooSMPRegistries.Keys.UPGRADE);
6367
if (upgradeRegistry.getEntry(payload.upgrade()).isPresent()) {
6468
RegistryEntry<Upgrade> upgrade = upgradeRegistry.getEntry(payload.upgrade()).get();
65-
upgrade.value().onSell(context.player());
66-
int currentPurchasedAmount = ServerUpgradeData.INSTANCE.getPurchasedAmount(context.player(), upgrade.value());
67-
ServerUpgradeData.INSTANCE.setPurchasedAmount(context.player(), upgrade.value(), currentPurchasedAmount - 1);
68-
Upgrade.syncData(context.player());
69+
upgrade.value().onSell(player);
70+
int currentPurchasedAmount = ServerUpgradeData.INSTANCE.getPurchasedAmount(player, upgrade.value());
71+
player.setExperienceLevel(player.experienceLevel + PriceObject.getCurrentPrice(upgrade.value(), player, currentPurchasedAmount - 1));
72+
ServerUpgradeData.INSTANCE.setPurchasedAmount(player, upgrade.value(), currentPurchasedAmount - 1);
73+
Upgrade.syncData(player);
6974
} else {
7075
server.sendMessage(Text.literal("Invalid upgrade").formatted(Formatting.RED));
7176
}

src/main/java/embin/poosmp/upgrade/Upgrade.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ public List<AttributeModifiersComponent.Entry> getAttributesForAmount(int amount
7777
if (this.attribute_modifiers.isPresent()) {
7878
List<AttributeModifiersComponent.Entry> attributes = new ArrayList<>(amount * this.attribute_modifiers.get().size());
7979
for (AttributeModifiersComponent.Entry attributeEntry : this.attribute_modifiers.get()) {
80-
int amountPerLevel = upgradeRegistry.getEntry(this).isIn(PooSMPTags.Upgrades.DOUBLE_ATTRIBUTE_GIVE) ? 2 : 1;
80+
//int amountPerLevel = upgradeRegistry.getEntry(this).isIn(PooSMPTags.Upgrades.DOUBLE_ATTRIBUTE_GIVE) ? 2 : 1;
8181
Identifier id = attributeEntry.modifier().id();
82-
attributes.addAll(UpgradeAttributeModifiersEntry.of(attributeEntry.attribute(), amountPerLevel).build(id, amount));
82+
attributes.addAll(UpgradeAttributeModifiersEntry.of(attributeEntry.attribute(), attributeEntry.modifier().value()).build(id, amount));
8383
}
8484
return attributes;
8585
}

src/main/resources/assets/poosmp/lang/en_us.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,5 +169,6 @@
169169
"block.poosmp.fake_grass_block": "Fake Grass Block",
170170
"block.poosmp.fake_stone": "Fake Stone",
171171
"block.poosmp.rigged_stone": "Rigged Stone",
172-
"tooltip.poosmp.item_value.sell_price": "Sells for $%s"
172+
"tooltip.poosmp.item_value.sell_price": "Sells for $%s",
173+
"upgrade.poosmp.mining_speed_increase": "Mining Speed Upgrade"
173174
}

src/main/resources/data/poosmp/poosmp/upgrade/block_reach_increase.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"icon": "minecraft:stone",
33
"price": {
4-
"base_price": 60,
4+
"base_price": 50,
55
"price_increase_base": 10
66
},
77
"max_purchases": 10,

src/main/resources/data/poosmp/poosmp/upgrade/fire_resistance.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"icon": "minecraft:magma_block",
33
"price": {
4-
"base_price": 250
4+
"base_price": 125
55
},
66
"max_purchases": 1,
77
"status_effect": {

src/main/resources/data/poosmp/poosmp/upgrade/health_increase.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"icon": "minecraft:enchanted_golden_apple",
33
"price": {
4-
"base_price": 50,
5-
"price_increase_base": 15
4+
"base_price": 70,
5+
"price_increase_base": 10
66
},
77
"attribute_modifiers": [
88
{
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"icon": "minecraft:iron_pickaxe",
3+
"price": {
4+
"base_price": 40,
5+
"price_increase_base": 20
6+
},
7+
"max_purchases": 20,
8+
"attribute_modifiers": [
9+
{
10+
"type": "minecraft:player.mining_efficiency",
11+
"id": "poosmp:upgrade/mining_speed_increase",
12+
"amount": 2,
13+
"operation": "add_value"
14+
}
15+
]
16+
}

0 commit comments

Comments
 (0)